初入activeMQ,spring+activeMQ的整合實現釋出訂閱
阿新 • • 發佈:2019-02-10
*spring+activeMQ整合
一直想寫部落格,技術用的都太多,但是都不久,總是忘記,老大讓搞老專案,今天自己在公司搞了MQ,記錄一下:
介紹就不需要了,網上一大堆,我喜歡直接上乾貨,直接擼,看起來也爽。
spring的原理就不用說了,首先spring裡面配置能夠掃描到這個xml
我的xml命名為applicationContext-activemq-container.xml 需要spring載入
xml內容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"
default-autowire="byName">
<!-- 配置JMS連線工廠 -->
<bean id="myConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<!-- Session快取數量 -->
<property name="sessionCacheSize" value="10" />
<!-- 接收者ID -->
<property name="clientId" value="client_119" />
<property name="targetConnectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<!-- MQ地址 -->
<property name="brokerURL"
value="你的MQ URL" />
<property name="nonBlockingRedelivery" value="true" />
<property name="sendTimeout" value="3000" />
<property name="alwaysSyncSend" value="true" />
<property name="redeliveryPolicy.useExponentialBackOff"
value="true" />
<property name="redeliveryPolicy.backOffMultiplier" value="2" /><!--
重試因子,重試規律為:6s 12s 24s 48s 96s 180s -->
<property name="redeliveryPolicy.initialRedeliveryDelay"
value="6000" /><!-- 6秒 -->
<property name="redeliveryPolicy.maximumRedeliveries"
value="6" /><!-- 6次 -->
<property name="redeliveryPolicy.maximumRedeliveryDelay"
value="180000" /><!-- 最大30分鐘間隔重試 -->
</bean>
</property>
</bean>
<!-- 傳送訊息的目的地(一個主題) -->
<bean id="myDestination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 設定訊息主題的名字 -->
<constructor-arg index="0" value="這裡直接寫你主題的名字" />
</bean>
<!-- 生產訊息配置 (自己定義) -->
<bean id="myTopicConsumer" class="這個裡面寫你類的全路徑,如果有多個繼續往下配置bean" />
<!-- 訊息監聽器 -->
<bean id="myTopicListener"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<constructor-arg ref="myTopicConsumer" />
<!-- 接收訊息的方法名稱 -->
<property name="defaultListenerMethod" value="這裡寫你listener裡面需要監聽的方法名字" />
<!-- 不進行訊息轉換 -->
<property name="messageConverter">
<null />
</property>
</bean>
<!-- 訊息監聽容器 -->
<bean id="myListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="myConnectionFactory" />
<!-- 釋出訂閱模式 -->
<property name="pubSubDomain" value="true" />
<!-- 訊息持久化 -->
<property name="subscriptionDurable" value="true" />
<property name="receiveTimeout" value="10000" />
<!-- 接收者ID -->
<property name="clientId" value="client_119" />
<property name="durableSubscriptionName" value="client_119" />
<property name="destination" ref="myDestination" />
<property name="messageListener" ref="myTopicListener" />
</bean>
</beans>
我xml裡面註釋都寫的很清楚,照著改就行了,看一眼也能明白撒。
配置已經有了 接下來就是寫我們的listener了,程式碼如下,簡單易懂:
package mtty.listener;
import java.util.ArrayList;
import java.util.List;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.JmsException;
public class RouteLimitUpdateMqListener {
private final Log logger = LogFactory.getLog(RouteLimitUpdateMqListener.class);
/**
* 處理MQ訊息
*
* @param message
* @throws JmsException
* @throws JMSException
* @date: 2017年12月27日
* @author: jiachen.zhang_c
*/
public void receive(TextMessage message) throws JmsException, JMSException {
logger.info("這裡接收MQ訊息,如果接收到,大吉大利,今晚吃雞!哈哈");
logger.info("message訊息為:"+message.getText());
}
怎麼樣,看完是不是很爽?直接貼上就擼
小弟第一篇文章到此結束,請各位路過大神勿噴,小弟雖然菜雞,相信技術跟我一樣的能夠拿上直接用,解決燃眉之急,我們下次見!
*微信:zjc13213248598
Q Q:517709617
歡迎各位大神大牛路過指導,感激不盡!*