RabbitMQ3.7.2入門到進階之工作隊列消息應答ack與消息持久化durable

RabbitMQ系列

此套免費課程視頻,本人錄播到了騰訊課堂 ,更多請關注騰訊課堂牧碼人或 登錄網站http://www.51mmr.net
https://ke.qq.com/course/288116#tuin=5740604a

1.消息中間件概述,使用場景(日誌處理,異步,系統解耦,流量削鋒)
2.Rabbitmq3.7.2安裝,控制檯簡介,管理員添加
3.用戶vhost配置以及介紹
4.java操作簡單隊列,生產者發送消息到隊列,消費者接收消息
5.簡單隊列的缺陷,工作隊列work queues之 輪詢分發(Round-robin),以及輪詢分發現象
6.工作隊列work queues 公平分發(fair dispatch);prefetchCount = 1來限制RabbitMQ發送的消息,手動應答ack。
7.消息應答ack與消息持久化durable
8.publish/subscribe發佈訂閱模式 交換機(轉發器)匿名轉發Nameless exchange, Fanout Exchange不處理路由鍵 , Direct Exchange處理路由鍵, Topic Exchange將路由鍵和某模式進行匹配。隊列綁定交換機(Exchange) ;
9.routing路由模式
10.topic主題模式
11.Rabbitmq之消息確認機制(AMQP事務機制)txSelect(), txCommit()以及txRollback(),事務機制的缺陷
12.Rabbitmq之消息確認機制(Confirm機制串行) waitForConfirms
13.Rabbitmq之消息確認機制(Confirm機制異步) ConfirmListener deliveryTag unconfirm集合維護
14.spring集成rabbitmq-client,template 的使用
15.大數據日誌收集系統消息中間件應用
16.搜索系統DIH消息中間件應用

Message acknowledgment(消息應答)

 boolean autoAck = false;  
2.  channel.basicConsume(QUEUE_NAME, autoAck, consumer);  

boolean autoAck = true;(自動確認模式)一旦RabbitMQ將消息分發給了消費者,就會從內存中刪除。在這種情況下,如果殺死正在執行任務的消費者,會丟失正在處理的消息,也會丟失已經分發給這個消費者但尚未處理的消息。

boolean autoAck = false; (手動確認模式) 我們不想丟失任何任務,如果有一個消費者掛掉了,那麼我們應該將分發給它的任務交付給另一個消費者去處理。 爲了確保消息不會丟失,RabbitMQ支持消息應答。消費者發送一個消息應答,告訴RabbitMQ這個消息已經接收並且處理完畢了。RabbitMQ可以刪除它了。

消息應答是默認打開的。也就是boolean autoAck =false;

Message durability(消息持久化)

當消費者掛了,我們也知道怎麼讓消息不丟失。但是如果RabbitMQ服務器停止,我們的消息仍將失去!當RabbitMQ退出或者崩潰,將會丟失隊列和消息。除非你不要隊列和消息。兩件事兒必須保證消息不被丟失:我們必須把“隊列”和“消息”設爲持久化。

    boolean durable = true;  
    channel.queueDeclare("test_queue_work", durable, false, false, null);  

那麼我們直接將程序裏面的false改成true就行了?? 不可以
會報異常channel error; protocol method: #method

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章