1. 程式人生 > >rabbitMq整合Spring後,消費者設定手動ack,並且在業務上控制是否ack

rabbitMq整合Spring後,消費者設定手動ack,並且在業務上控制是否ack

1. 在這裡不提如何整合rabbit mq到Spring。

2. 實現功能的配置都在消費者端:

3. 下面是步驟和說明

(1)在消費者端的mq配置檔案上新增,配置  關鍵程式碼為 acknowledeg = "manual"
,意為表示該消費者的ack方式為手動(此時的queue已經和生產者的exchange通過某個routeKey綁定了)

<rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual">
    <rabbit:listener queues="queue_xxx" ref="MqConsumer"/>
    <rabbit:listener queues="queue_xxx" ref="MqConsumer2"/>
</rabbit:listener-container>

(2)新建一個類 MqConsumer ,並實現介面  ChannelAwareMessageListener ,實現onMessage方法,不需要指定方法。

因為下方圖所示,springAMQP中已經實現了一個功能,如果該監聽器已經實現了下面2個介面,則直接呼叫onMessage方法


(3)關鍵點在實現了ChannelAwareMessageListener的onMessage方法後,會有2個引數。

一個是message(訊息實體),一個是channel就是當前的通道

很多地方都沒有說清楚怎麼去手動ack,其實手動ack就是在當前channel裡面呼叫basicAsk的方法,並傳入當前訊息的tagId

就可以了。


其中deliveryTag是tag的id,由生產者生成。

第二個引數我其實也沒理解用途,暫時還沒有模擬出場景,所以先不討論。

同樣的,如果要unack或者拒絕訊息(reject)的時候,也是呼叫channel裡面的basicXXX方法就可以了(當然要制定tagId)。

注意如果拋異常或unack(並且requeue為true),訊息會一直重新入佇列,一不小心就會xxxxx一大堆訊息不斷重複~。

//訊息的標識,false只確認當前一個訊息收到,true確認所有consumer獲得的訊息

channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

//ack返回false,並重新回到佇列,api裡面解釋得很清楚

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);

//拒絕訊息

channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);

暫時講完,如果有什麼補充或糾正歡迎大家指出

相關推薦

rabbitMq整合Spring消費者設定手動ack並且業務控制是否ack

1. 在這裡不提如何整合rabbit mq到Spring。 2. 實現功能的配置都在消費者端: 3. 下面是步驟和說明 (1)在消費者端的mq配置檔案上新增,配置  關鍵程式碼為 acknowledeg = "manual" ,意為表示該消費者的ack方式為手動(此時的qu

RabbitMQ整合spring

username cep virtual containe 1.7 dconf system xmlns war 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://ww

RabbitMQ學習筆記(5)----RabbitMQ整合Spring

在Spring AMQP專案中Spring也提供了對RabbitMQ的支援,這裡在之前學習SpringBoot的時候也整合過,但是今天這裡使用的Spring的xml配置來整個rabbit. Spring AMQP專案地址:https://spring.io/projects/spring-amqp;

RabbitMQ整合Spring配置檔案詳解

一、rabbitmq 配置檔案 在web 專案開發過程中,一般分為生產者配置檔案和消費者配置檔案。 一、準備工作 安裝好rabbitmq,並在專案中增加配置檔案 rabbit.properties 內容如下: rmq.ip=192.188.113.114 rmq.port=

rabbitmq 整合 spring mvc

引入包 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-ra

rabbitmq 整合spring boot

引入包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

Rabbitmq 整合Spring,SpringBoot與Docker

最近開始研究訊息佇列框架Rabbitmq,之前對訊息佇列只是有個基本概念而已。至於使用場景也侷限於傳送郵件,傳送系統訊息等。 既然開始學習了,首先上官網把基本概念擼清除後,再看看Spring官方整合文件AMQP,基本上摸清了套路。 專案開始前的準備:

VMware虛擬機器服務設定手動啟動啟動使用VMware service start.bat進行啟動服務

        電腦上安裝了VMware虛擬機器,可是VMware虛擬機器並不常用,因此需要將服務設定成手動啟動,可是每次啟動的時候要啟動5個服務,有點多,因此又編寫了一個VMware service start.bat批處理檔案,進行批處理啟動。一、設定服務為手動啟動二、編

MQ訊息佇列--RabbitMQ整合Spring理論及例項講解

今天Boss叫我去他的小黑屋分配任務,出門就記得倆詞“MQ”、“訊息佇列”。從來都沒聽說過這讓我怎麼搞?對於這種情況我慣有的方法論就是:先搞清楚它是什麼、有什麼用、有什麼工具可用、怎麼用,然後就是……擼起袖子使勁幹吧! 1、什麼是訊息佇列 訊息是指在兩個

RabbitMQ學習系列:五、RabbitMQ整合Spring

最後學習一下RabbitMQ如何整合Spring,畢竟現在大多是使用框架來做專案。這篇主要使用的方式是XML配置。 介紹 RabbitMQ整合Spring的學習中,搭了兩個web專案,一個作為客戶端,一個作為服務端,放在一個專案中也可以實現效果,但

Java ZXing 生成QRCode二維碼的兩種方式設定圖片大小和外白色邊框大小

QRGen在ZXing基礎上開發,這個庫使得利用Java生成QR碼變為小菜一碟。它需要依賴ZXing,所以生成圖案時你同時需要ZXing和QRGen的jar包。 QR 碼最常見的應用便是為網站中一個特定的網頁或下載頁帶來流量。因此,QR碼常常會編碼URL或網站地址,使用者可以通過手機攝像頭掃描,並在其瀏覽器中

奇葩6:下載檔案沒有設定超時時間但是還是報錯Connection timed out

現象: 下載檔案 FileUtil fileUtils = new FileUtil(); URL url = new URL(urlStr); urlConn = (HttpURLConnection) url.openConnection(); urlConn.set

hibernate問題為什麼設定了Dialect可還是報錯說沒設定

在看慕課網SH整合學生資訊管理系統時出現了這個錯誤 log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the

4 手把手整合 RabbitMQ & Spring 家族

本為大家講解RabbitMQ如何與Spring系的框架體系進行整合 (RabbitMQ整合Spring(RabbitMQ整合Spring AMQP實戰,RabbitMQ整合Spring Boot實戰 ,RabbitMQ整合SpringCloud實戰) 涉及實

Struts2整合spring注意action的配置設定多例模式

struts 2的Action是多例項的並非單例,也就是每次請求產生一個Action的物件。原因是:struts 2的Action中包含資料,例如你在頁面填寫的資料就會包含在Action的成員變數裡面。如果Action是單例項的話,這些資料在多執行緒的環境下就會相互影響,例如造成別人填寫的資料被你看

RabbitMQspring整合,配置完整的生產者和消費者

    RabbitMQ與AMQP協議詳解可以看看這個  http://www.cnblogs.com/frankyou/p/5283539.html 下面是rabbitMQ和spring整合的配置,我配置了二種ExCahange:  topicExchange和direc

spring boot 整合Druidsql監控不顯示資料問題

在Druid的配置中增加@@ConfigurationProperties這段配置,就可以檢視sql監控了 package com.cn; import java.sql.SQLException; import javax.sql.DataSource; import

spring整合mybatis列印SQL語句

這篇文章拾人牙慧,僅供自己使用 網上說mybatis的早前版本配置列印sql還比較簡單,在3.0.6之後配置方式修改了。 現在的spring-mybatis.xml配置如下: <!-- spring和MyBatis完美整合,不需要mybatis的配置對

springRabbitMQ整合 消費者消費不到訊息 重啟才能消費到的問題解決

RabbitMQ是當前一個挺火的訊息佇列中介軟體 相比ActiveMQ 訊息更不容易丟失 我之前用的是ActiveMQ 後邊有的時候會莫名其妙的收不到訊息 專案緊後邊也沒時間排查 經朋友的推薦下 換了RabbitMQ 後邊用著也沒啥問題 今天 的Rabbit

解決spring整合mybatis無法列印SQL語句的問題

網上說mybatis的早前版本配置列印sql還比較簡單,在3.0.6之後配置方式修改了。現在的spring-mybatis.xml配置如下:<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSession