1. 程式人生 > >初入activeMQ,spring+activeMQ的整合實現釋出訂閱

初入activeMQ,spring+activeMQ的整合實現釋出訂閱

*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
歡迎各位大神大牛路過指導,感激不盡!*