亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

3.RabbitMQ教程—特性demo

2019-11-10 17:54:09
字體:
來源:轉載
供稿:網友

Go to start of metadata

官方文檔資料地址

SPRing地址:http://projects.spring.io/spring-amqp/

Spring提供的Demo地址:https://github.com/spring-projects/spring-amqp-samples

中文文檔地址:http://rabbitmq.mr-ping.com/

RabbitMQ的6個特性

"Hello World!"

Work queues(工作隊列)

Publish/Subscribe(發布訂閱)

Routing(路由)

Topics(主題交換機)

RPC(遠程調用)

(此6特性不舉例說明,請查閱上述中文文檔地址和下載spring的demo理解即可)

圍繞幾個特點給出demo

隊列可恢復性,數據可恢復性

// 生產者public static void main(String[] args) {    String DURABLE_QUEUE_NAME = "queue_for_durable";    String UNDURABLE_QUEUE_NAME = "queue_for_undurable";         ConnectionFactory factory = new ConnectionFactory();    factory.setHost("10.200.0.150");    factory.setPort(5672);    factory.setUsername("root");    factory.setPassWord("123456");    try {        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        // 聲明兩個隊列,第二個參數表示該隊列在rabbit服務器重啟后是否自動創建        channel.queueDeclare(DURABLE_QUEUE_NAME, truefalsefalsenull);        channel.queueDeclare(UNDURABLE_QUEUE_NAME, falsefalsefalsenull);                 // 數據是否可恢復(聲明數據為文本類型,可恢復)        BasicProperties basicProperties = MessageProperties.PERSISTENT_TEXT_PLAIN;                 channel.basicPublish("", DURABLE_QUEUE_NAME, null"文本一".getBytes());        channel.basicPublish("", DURABLE_QUEUE_NAME, basicProperties, "文本二".getBytes());        channel.basicPublish("", UNDURABLE_QUEUE_NAME, null"文本三".getBytes());        channel.close();        connection.close();    catch (IOException e) {        e.printStackTrace();    catch (TimeoutException e) {        e.printStackTrace();    }}

執行上輸代碼,rabbit服務器會生成2個隊列,持久化隊列2條消息,臨時隊列1條消息;在linux服務器執行rabbit服務重啟命令:service rabbitmq-server restart,重啟后查看隊列狀態,此時只有1個持久化隊列,且只有1條消息  

ack應答機制

// 消費者public static void main(String[] args) {    String DURABLE_QUEUE_NAME = "queue_for_durable";// 持久化隊列         ConnectionFactory factory = new ConnectionFactory();    factory.setHost("10.200.0.150");    factory.setPort(5672);    factory.setUsername("root");    factory.setPassword("123456");    try {        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        channel.queueDeclare(DURABLE_QUEUE_NAME, truefalsefalsenull);// 創建消費隊列(防止消費者先上線無法找到隊列而拋出異常)        channel.basicQos(1);// 指定當前接收消息的容量        QueueingConsumer consumer = new QueueingConsumer(channel);                 /*         * 第二個參數如果為true則在接收到消息的一瞬間,rabbit服務器會刪除消息         * 為false表明ack應答機制為手動響應,此時消息會存儲在rabbit等待應答的隊列中,在未收到應答,會重新進入準備狀態         */        String resp = channel.basicConsume(DURABLE_QUEUE_NAME, false, consumer);        System.out.println("======:" + resp);                 QueueingConsumer.Delivery delivery = null;        while (null != (delivery = consumer.nextDelivery())) {            String message = new String(delivery.getBody());            System.out.println("獲取到消息:" + message);                         // channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);// 手動回應服務器,當前任務執行成功        }    catch (IOException e) {        e.printStackTrace();    catch (TimeoutException e) {        e.printStackTrace();    catch (ShutdownSignalException e) {        e.printStackTrace();    catch (ConsumerCancelledException e) {        e.printStackTrace();    catch (InterruptedException e) {        e.printStackTrace();    }}

執行程序,此時觀察rabbit服務器隊列狀態,持久化隊列中的消息處于<待應答>狀態,停止程序,此時rabbit服務器隊列數據狀態恢復到準備狀態;打開注釋channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);,執行程序后觀察rabbit服務器隊列發現數據已被移除;

消息的監聽

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="<a href="http://www.springframework.org/schema/beans" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/beans" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.w3.org/2001/XMLSchema-instance"xmlns:rabbit="<a href="http://www.springframework.org/schema/rabbit" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/rabbit"    xsi:schemaLocation="http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd        http://www.springframework.org/schema/beans  <a href="http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">    <description>rabbitMQ連接服務配置</description>         <!-- 連接配置,addresses可以配置多個服務器地址,用英文逗號分隔開 -->    <rabbit:connection-factory id="connectionFactory" addresses="10.200.0.150:5672" username="root" password="123456" />    <rabbit:admin connection-factory="connectionFactory" />    <!-- 消息轉換器 -->    <bean id="gsonConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />    <!-- 消息隊列 -->    <rabbit:queue name="queue_for_durable" />    <rabbit:queue name="queue_for_undurable" />         <!-- 連接模板 -->    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" message-converter="gsonConverter" exchange="directExchange" />    <!-- 客戶端發送器:全名匹配 -->    <rabbit:direct-exchange name="directExchange">        <rabbit:bindings>            <rabbit:binding queue="queue_for_durable" key="queue_for_durable" />            <rabbit:binding queue="queue_for_undurable" key="queue_for_undurable" />        </rabbit:bindings>    </rabbit:direct-exchange>    <!-- 消息接收:DirectListener.java繼承MessageListener接口實現onMessage方法即可,concurrency表示并發處理的監聽數量 -->    <bean id="directListener" class="com.xiangshang.mq.listener.DirectListener" />    <rabbit:listener-container connection-factory="connectionFactory" message-converter="gsonConverter" concurrency="2" acknowledge="auto">        <rabbit:listener queues="queue_for_durable,queue_for_undurable" ref="directListener" />    </rabbit:listener-container></beans>

junit加載上述文件,使用生產者向隊列發送消息,此時可以看到監聽器中接收到數據(提示:實現ChannelAwareMessageListener接口,listener也可以實現ack機制,此時acknowledge="manual")

  

發布訂閱

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="<a href="http://www.springframework.org/schema/beans" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/beans" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.w3.org/2001/XMLSchema-instance"xmlns:rabbit="<a href="http://www.springframework.org/schema/rabbit" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/rabbit"    xsi:schemaLocation="http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd        http://www.springframework.org/schema/beans  <a href="http://www.springframework.org/schema/beans/spring-beans-4.0.xsd" "="" style="color: rgb(59, 115, 175); text-decoration: none; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">    <description>rabbitMQ連接服務配置</description>         <!-- 連接配置,addresses可以配置多個服務器地址,用英文逗號分隔開 -->    <rabbit:connection-factory id="connectionFactory" addresses="10.200.0.150:5672" username="root" password="123456" />    <rabbit:admin connection-factory="connectionFactory" />    <!-- 消息轉換器 -->    <bean id="gsonConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />    <!-- 消息隊列 -->    <rabbit:queue name="queue_for_durable" />    <rabbit:queue name="queue_for_undurable" />         <!-- 連接模板 -->    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" message-converter="gsonConverter" exchange="fanoutExchange" />    <!-- 發布訂閱 -->    <rabbit:fanout-exchange name="fanoutExchange">        <rabbit:bindings>            <rabbit:binding queue="queue_for_durable"  />            <rabbit:binding queue="queue_for_undurable" />        </rabbit:bindings>    </rabbit:fanout-exchange></beans>

junit加載上述文件,使用生產者向隊列發送消息,此時在rabbit服務器可以看到發布訂閱模式路由下這兩個隊列,均能收到一條消息 

延遲消息隊列(參見下一頁整合spring的demo)優先級隊列參見下一頁整合spring的demo
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久之久亚州精品露出| 欧美精品一区在线播放| 在线性视频日韩欧美| 国产精彩精品视频| 国模精品视频一区二区三区| 亚洲成人网在线观看| 成人午夜高潮视频| 久久久久国产一区二区三区| 中文字幕国产精品久久| 日韩视频免费在线观看| 亲爱的老师9免费观看全集电视剧| 久久久久久久久久久av| 国产一区二区三区丝袜| 伊人av综合网| 久久精品在线视频| 日韩欧美一区二区三区久久| www国产精品com| 色综合老司机第九色激情| 亚洲福利精品在线| 亚洲人成亚洲人成在线观看| 中文字幕亚洲综合久久筱田步美| 日韩欧美亚洲成人| 91精品国产网站| 91精品久久久久久久久青青| 欧美影院成年免费版| 国产精品视频免费在线观看| 亚洲成人激情视频| 久久久久九九九九| 欧美在线性视频| 欧美与欧洲交xxxx免费观看| 亚洲成av人乱码色午夜| 成人春色激情网| 51ⅴ精品国产91久久久久久| 尤物99国产成人精品视频| www.欧美免费| 国产精品亚洲片夜色在线| 欧美性videos高清精品| 久久中文字幕在线视频| 亚洲精品小视频| 亚洲国产成人精品久久| 欧美激情性做爰免费视频| 亚洲va欧美va在线观看| 自拍偷拍亚洲在线| 中文字幕亚洲一区二区三区| 日韩成人在线观看| 91av在线不卡| 亚洲高清色综合| 日韩高清av一区二区三区| 欧美一级高清免费播放| 色哟哟亚洲精品一区二区| 午夜精品久久久久久久白皮肤| 激情亚洲一区二区三区四区| 国产一区二区av| 国产精品美女主播| 亚洲国产精品网站| 国产噜噜噜噜久久久久久久久| 91成人在线视频| 在线看欧美日韩| 日韩av免费看网站| 国产精品久久久久久久久久尿| 一区二区三区回区在观看免费视频| 深夜成人在线观看| 欧美电影免费观看高清| 日韩亚洲国产中文字幕| 精品国产一区二区三区久久久| 亚洲精品网站在线播放gif| 亚洲欧美日韩精品久久奇米色影视| 日韩av在线网| 成人欧美在线视频| 国产精品免费久久久久久| 国产精品久久久久久久久借妻| 夜夜嗨av色综合久久久综合网| 日韩电影中文字幕| 成人a级免费视频| 亚洲女人天堂视频| 亚洲色图色老头| 91地址最新发布| 国产98色在线| 琪琪第一精品导航| 欧美裸体男粗大视频在线观看| 亚洲国产成人久久综合一区| 成人做爰www免费看视频网站| 亚洲乱码一区av黑人高潮| 2019中文字幕在线免费观看| 91香蕉国产在线观看| 91亚洲精品视频| 国产99久久精品一区二区永久免费| 最新69国产成人精品视频免费| 欧美最猛黑人xxxx黑人猛叫黄| 91在线视频导航| 奇米影视亚洲狠狠色| 成人情趣片在线观看免费| 欧美特黄级在线| 国内免费久久久久久久久久久| 久久久av网站| 国产精品永久免费在线| 久久综合免费视频影院| 国产精品第七十二页| 最近2019年日本中文免费字幕| 欧美福利视频网站| 亚洲欧洲自拍偷拍| 97高清免费视频| 久久成人一区二区| 疯狂欧美牲乱大交777| 精品美女久久久久久免费| 日韩中文在线中文网在线观看| 国产精品尤物福利片在线观看| 欧美色欧美亚洲高清在线视频| 国产精品久久久久av| 国产精品久久久久国产a级| 亚洲肉体裸体xxxx137| 97视频在线观看网址| 国产午夜精品免费一区二区三区| 456国产精品| 日本精品视频网站| 国产视频亚洲视频| 亚洲精品中文字幕有码专区| 亚洲第一区在线| 亚洲精品国产精品自产a区红杏吧| 国产精品久久久久99| 怡红院精品视频| 国模精品系列视频| 国产视频观看一区| 国产精品极品美女在线观看免费| 欧美亚洲另类在线| 国产婷婷成人久久av免费高清| 性色av一区二区三区在线观看| 欧美电影免费观看网站| 91av在线网站| 欧美大片在线影院| 国色天香2019中文字幕在线观看| 成人久久久久久久| 亚洲四色影视在线观看| 中文字幕亚洲综合| 91美女福利视频高清| 性色av一区二区三区免费| 91精品国产色综合| 91国内在线视频| 欧美色图在线视频| 欧美最猛性xxxx| 欧美大片免费观看在线观看网站推荐| 欧美激情a∨在线视频播放| 高清欧美性猛交xxxx| 亚洲精品99久久久久中文字幕| 国产精自产拍久久久久久蜜| 78m国产成人精品视频| 国产一区二区欧美日韩| 欧美怡红院视频一区二区三区| 综合136福利视频在线| 亚洲欧美日韩另类| 97涩涩爰在线观看亚洲| 亚洲影院污污.| 成人免费直播live| 国产精品久久久久久久久久久不卡| 亚洲偷熟乱区亚洲香蕉av| 国产偷亚洲偷欧美偷精品| 国产精品亚洲美女av网站| 欧洲成人性视频| 欧美性理论片在线观看片免费| 亚洲视频自拍偷拍| 亚洲精品永久免费精品| 精品视频偷偷看在线观看| 欧美亚洲另类制服自拍| 亚洲热线99精品视频|