RabbitMq中的訊息應答與持久化

weixin_33816946發表於2018-03-19

一:訊息應答

1.介紹

  涉及到的程式:

  boolean autoAck=false;

  channel.basicConsume(QUENE_NAME,autoAck,consumer);

 

2.autoAck=true

  自動確認模式。

  一旦rabbitMq將訊息傳送給消費者,就從記憶體中刪除。

  缺點:如果這個時候消費者掛掉,就會丟失正在處理的訊息。

 

3.autoAck=false

  手動模式。

  如果一個消費者掛掉,就會交給其他的消費者。

  rabbitMq支援訊息應答,消費者傳送一個訊息應答,告訴rabbitMq這個訊息已經處理結束,然後這時rabbitMq就會刪除記憶體中的訊息。

 

4.預設

  預設是開啟的,為false。

 

二:持久化

1.出現的緣由

  如果rabbitMq掛了,訊息就會丟失。

  rabbitMq支援持久化。

  

2.涉及的程式

  //建立佇列宣告

  channel.queueDeclare(QUENE_NAME,false,false,false,null);

  其中,第二個引數是durable,是否持久化。

 

3.注意點

  將第二個引數改成true,直接執行程式是會報錯的。

  原因如下:

    因為剛才在執行程式的時候已經定義了一個佇列,然後又定義了一個相同的佇列,並且引數不同。這個是不被rabbitMq所允許的。

  做法:

    換一個佇列的名字,或者去管理平臺上刪除已經存在的佇列。

    

 

相關文章