初入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
欢迎各位大神大牛路过指导,感激不尽!*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值