您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關SpringMVC消費RabbitMQ隊列的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Jdk1.8.0_202
Spring 4.3.9.RELEASE
spring-webmvc 4.3.9.RELEASE
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-amqp</artifactId> <version>2.0.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>2.0.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.4.RELEASE</version> </dependency>
在jdbc.properties文件中加入RabbitMQ地址端口用戶密碼等信息
#RabbitMQ地址 mq_host=127.0.0.1 #RabbitMQ端口 mq_port=5672 #RabbitMQ虛擬主機 mq_virtual_host=/ #RabbitMQ用戶名 mq_username=admin #RabbitMQ密碼 mq_password=your rabbitmq password
新建 applicationContext-rabbitmq.xml
內容如下
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-2.0.xsd" > <description>RabbitMQ 連接服務配置</description> <!-- 連接配置 --> <rabbit:connection-factory id="connectionFactory" host="${mq_host}" username="${mq_username}" password="${mq_password}" port="${mq_port}" virtual-host="${mq_virtual_host}"/> <rabbit:admin connection-factory="connectionFactory"/> <!-- rabbit template聲明--> <rabbit:template exchange="capture_exchanges" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" /> <!-- 消息對象json轉換類 --> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /> <!-- 申明消息隊列Queue --> <!-- durable:是否持久化 exclusive: 僅創(chuàng)建者可以使用的私有隊列,斷開后自動刪除 auto_delete: 當所有消費客戶端連接斷開后,是否自動刪除隊列 ignore-declaration-exceptions : [非常重要] 當前隊列已經(jīng)創(chuàng)建,則忽略;消費已有隊列時需增加此配置,否則啟動報錯 --> <!--<rabbit:queue id="mail" name="mail" durable="true" auto-delete="false" exclusive="false" />--> <rabbit:queue id="capture-000001" name="capture-000001" durable="true" ignore-declaration-exceptions="true" auto-delete="false" exclusive="false" /> <!-- 交換機定義 --> <!-- rabbit:direct-exchange:定義exchange模式為direct,意思就是消息與一個特定的路由鍵完全匹配,才會轉發(fā)。 rabbit:binding:設置消息queue匹配的key --> <rabbit:direct-exchange name="capture_exchanges" durable="true" auto-delete="false" ignore-declaration-exceptions="true" id="capture_exchanges"> <rabbit:bindings> <!--<rabbit:binding queue="mail" key="mail"/>--> <rabbit:binding queue="capture-000001" key="000001"/> </rabbit:bindings> </rabbit:direct-exchange> <!-- 配置監(jiān)聽 acknowledeg = "manual" 設置手動應答 當消息處理失敗時:會一直重發(fā) 直到消息處理成功,需要自己手動提交;否則不會繼續(xù)消費;Auto自動應答,則會繼續(xù)往下消費 prefetch ="1" 設置消息消費數(shù)量,每次從隊列中取1條消息;多個監(jiān)聽器公平分發(fā),同一時刻僅有一條消息處理 concurrency = "1" 設置每個listener并發(fā)的消費者個數(shù) --> <rabbit:listener-container connection-factory="connectionFactory" transaction-size="1" prefetch="1" concurrency="1" acknowledge="auto" message-converter="jsonMessageConverter" monitor-interval="5000"> <!-- 配置監(jiān)聽器 queues:監(jiān)聽的隊列,多個的話用逗號(,)分隔 ref:監(jiān)聽器,需實現(xiàn)監(jiān)聽器接口,@Component加入Spring管理 --> <!--<rabbit:listener queues="mail" ref="mailListener"/>--> <rabbit:listener queues="capture-000001" ref="plateNumRabbitConsumer" /> </rabbit:listener-container> </beans>
創(chuàng)建與ref="plateNumRabbitConsumer"對應的消費者類,必須添加注解@Component加入Spring管理,實例名可自定義,但必須與ref關聯(lián)的名字一致;消費者類必須實現(xiàn)MessageListener,監(jiān)聽隊列的變化,實現(xiàn)實時消費;
同一個項目中若同時存在生產(chǎn)者和消費者,applicationContext-rabbitmq.xml中聲明的工廠,路由,隊列都無特別注意的地方;生產(chǎn)者需要使用到rabbit:template,消費者不需要此配置即可行
若只需消費隊列,在聲明隊列時,若rabbitmq服務中已創(chuàng)建過同名隊列,則必須配置ignore-declaration-exceptions="true",否則項目啟動時將報錯
監(jiān)聽容器的配置,需注意prefetch="1" 和 acknowledge="auto",prefetch表示單次從隊列中消費的數(shù)量,prefetch=”1”,說明單次消費1條消息,若容器中配置多個監(jiān)聽器消費,則會公平分發(fā);acknowledge="auto" 表示自動應答,消費完成后回復確認,改消息將從rabbitmq服務中刪除,并且會自動消費下一條消息,acknowledge=" manual"表示手動應答 當消息處理失敗時:會一直重發(fā) 直到消息處理成功,需要自己手動提交;否則不會繼續(xù)消費;手動應答方式需要配置template的confirm-callback回調方法;
關于“SpringMVC消費RabbitMQ隊列的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。