RabbitMQ消息中間件學習3:快速入門案例

      網友投稿 772 2025-04-01

      聲明:本系列文章是根據b站狂神課進行 學習記錄。原b站鏈接:https://www.bilibili.com/video/BV1dX4y1V73G?p=12,侵權刪。


      rabbitmq是spring一個公司的,所以很多公司 企業選擇用rabbitmq。

      所有的中間件技術都是基于TCP、IP的協議,只不過rabbitmq遵循的是amqp,在tcp、ip基礎之上定義的。

      五個用的比較多的模式。現在來實現一個簡單的步驟。

      這就是最簡單的模式。一個生產者一個消費者,一個MQ。

      因為是基于tcp和ip的。所以一定會有ip和端口。

      具體步驟:

      1、創建連接工程。

      2、創建連接Connection

      RabbitMQ消息中間件學習3:快速入門案例

      3、通過連接獲取通道Channel。

      4、通過通道創建交換機、聲明隊列、綁定關系、路由Key、發送消息、接收消息。

      5、準備消息內容。

      6、發送消息給消息隊列queue。

      7、關閉連接。

      8、關閉通道。

      1、構建一個maven工程

      2、導入rabbitmq的maven依賴

      java的原聲依賴

      com.rabbitmq amqp-client 5.10.0

      spring的依賴

      org.springframework.amqp spring-amqp 2.2.5.RELEASE org.springframework.amqp spring-rabbit 2.2.5.RELEASE

      springboot依賴

      org.springframework.boot spring-boot-starter-amqp

      rabbitmq和spring同屬一個公司開放的產品,所以他們的支持也是非常完善,這也是為什么推薦使用rabbitmq的一個原因

      3、啟動rabbitmq-server服務

      systemctl start rabbitmq-server 或者 docker start myrabbit

      4、定義生產者

      package com.xuexiangban.rabbitmq.simple; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; /** * @author: 學相伴-飛哥 * @description: Producer 簡單隊列生產者 * @Date : 2021/3/2 */ public class Producer { public static void main(String[] args) { // 1: 創建連接工廠 ConnectionFactory connectionFactory = new ConnectionFactory(); // 2: 設置連接屬性 connectionFactory.setHost("47.104.141.27"); connectionFactory.setPort(5672); connectionFactory.setVirtualHost("/"); connectionFactory.setUsername("admin"); connectionFactory.setPassword("admin"); Connection connection = null; Channel channel = null; try { // 3: 從連接工廠中獲取連接 connection = connectionFactory.newConnection("生產者"); // 4: 從連接中獲取通道channel channel = connection.createChannel(); // 5: 申明隊列queue存儲消息 /* * 如果隊列不存在,則會創建 * Rabbitmq不允許創建兩個相同的隊列名稱,否則會報錯。 * * @params1: queue 隊列的名稱 * @params2: durable 隊列是否持久化 * @params3: exclusive 是否排他,即是否私有的,如果為true,會對當前隊列加鎖,其他的通道不能訪問,并且連接自動關閉 * @params4: autoDelete 是否自動刪除,當最后一個消費者斷開連接之后是否自動刪除消息。 * @params5: arguments 可以設置隊列附加參數,設置隊列的有效期,消息的最大長度,隊列的消息生命周期等等。 * */ channel.queueDeclare("queue1", false, false, false, null); // 6: 準備發送消息的內容 String message = "你好,學相伴!!!"; // 7: 發送消息給中間件rabbitmq-server // @params1: 交換機exchange // @params2: 隊列名稱/routing // @params3: 屬性配置 // @params4: 發送消息的內容 channel.basicPublish("", "queue1", null, message.getBytes()); System.out.println("消息發送成功!"); } catch (Exception ex) { ex.printStackTrace(); System.out.println("發送消息出現異常..."); } finally { // 7: 釋放連接關閉通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (Exception ex) { ex.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (Exception ex) { ex.printStackTrace(); } } } } }

      5、web端觀察運行結果

      先有了鏈接、然后有了通道、然后慢慢就有了。

      (配合java打斷點一步一步 進行查看)

      在我們設置代碼的時候,設置的是非持久化,所以隨著最后一個消息完畢后,是否把消息隊列刪除。

      6、消費者代碼

      package com.xuexiangban.rabbitmq.simple; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; /** * @author: 學相伴-飛哥 * @description: Producer 簡單隊列生產者 * @Date : 2021/3/2 */ public class Producer { public static void main(String[] args) { // 1: 創建連接工廠 ConnectionFactory connectionFactory = new ConnectionFactory(); // 2: 設置連接屬性 connectionFactory.setHost("47.104.141.27"); connectionFactory.setPort(5672); connectionFactory.setVirtualHost("/"); connectionFactory.setUsername("admin"); connectionFactory.setPassword("admin"); Connection connection = null; Channel channel = null; try { // 3: 從連接工廠中獲取連接 connection = connectionFactory.newConnection("生產者"); // 4: 從連接中獲取通道channel channel = connection.createChannel(); // 5: 申明隊列queue存儲消息 /* * 如果隊列不存在,則會創建 * Rabbitmq不允許創建兩個相同的隊列名稱,否則會報錯。 * * @params1: queue 隊列的名稱 * @params2: durable 隊列是否持久化 * @params3: exclusive 是否排他,即是否私有的,如果為true,會對當前隊列加鎖,其他的通道不能訪問,并且連接自動關閉 * @params4: autoDelete 是否自動刪除,當最后一個消費者斷開連接之后是否自動刪除消息。 * @params5: arguments 可以設置隊列附加參數,設置隊列的有效期,消息的最大長度,隊列的消息生命周期等等。 * */ channel.queueDeclare("queue1", false, false, false, null); // 6: 準備發送消息的內容 String message = "你好,學相伴!!!"; // 7: 發送消息給中間件rabbitmq-server // @params1: 交換機exchange // @params2: 隊列名稱/routing // @params3: 屬性配置 // @params4: 發送消息的內容 channel.basicPublish("", "queue1", null, message.getBytes()); System.out.println("消息發送成功!"); } catch (Exception ex) { ex.printStackTrace(); System.out.println("發送消息出現異常..."); } finally { // 7: 釋放連接關閉通道 if (channel != null && channel.isOpen()) { try { channel.close(); } catch (Exception ex) { ex.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (Exception ex) { ex.printStackTrace(); } } } } }

      持久化和非持久化就是:服務器重啟隊列是否還在,持久化肯定在,同時需要注意持久化肯定會存盤。但是非持久化會 存盤,但是隨著服務器的重啟會丟失的。

      RabbitMQ

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:saas低代碼開發平臺榜單,您需要了解這些!
      下一篇:原來的版本幫助還能看函數參考什么的。現在在哪看功能介紹和函數參考?
      相關文章
      久久久亚洲精品蜜桃臀| 国产99久久亚洲综合精品| 五月天婷亚洲天综合网精品偷| 亚洲欧洲日产国码www| 亚洲一区二区三区四区在线观看| 国产亚洲精品a在线观看app| 亚洲日韩国产精品第一页一区| 国产偷国产偷亚洲高清日韩| 久久国产成人亚洲精品影院 | 国产亚洲女在线线精品| 午夜亚洲WWW湿好爽| 亚洲AV成人精品一区二区三区| 亚洲AV永久无码精品网站在线观看| 亚洲日韩看片无码电影| 亚洲人成网站在线在线观看| 亚洲精品人成网线在线播放va| 亚洲精品国产av成拍色拍| 人人狠狠综合久久亚洲| 无码天堂亚洲国产AV| 亚洲不卡无码av中文字幕| 亚洲精品无码久久毛片| 国产美女亚洲精品久久久综合| 国产亚洲人成A在线V网站| 亚洲精品制服丝袜四区| 亚洲av午夜福利精品一区人妖| 亚洲AV无码乱码国产麻豆穿越| 亚洲视频在线一区| 亚洲成AV人片久久| 亚洲熟妇自偷自拍另欧美| 久久久久亚洲国产AV麻豆| 亚洲成年人啊啊aa在线观看| 国产亚洲精品自在线观看| 国产亚洲综合一区柠檬导航| 亚洲精品视频在线| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲人成未满十八禁网站| 亚洲国产精品成人AV无码久久综合影院| 亚洲国产综合人成综合网站| 国产成人综合亚洲AV第一页| 亚洲AV成人精品网站在线播放| 亚洲国产高清美女在线观看|