ActiveMQ 与spring整合

这两个包很重要

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>3.1.0.RELEASE</version>
        </dependency>

配置文件整合

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd "
>

    <!-- JMS连接工厂 -->
    <bean id="myConsumerFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="failover:(tcp://${mq.ip})"/>
        <property name="useAsyncSend" value="true"/>
        <!-- 客户端唯一标识 -->
        <property name="clientID" value="${mq.env}.lyt.msg.center"/>
        <!-- ObjectMessage信任所有对象 -->
        <property name="trustAllPackages" value="true"/>
    </bean>

    <!-- 定义主题 -->
    <bean id="sitLogTopic" class="org.apache.activemq.command.ActiveMQTopic">
        <!-- 主题名字 -->
        <constructor-arg value="${mq.env}.lyt.sitlog"/>
    </bean>

    <!-- 消息消费监听者 -->
    <bean id="logListener" class="com.lyt.msg.mq.LogListener"/>

    <!-- 订阅客户端 -->
    <bean id="logListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="myConsumerFactory"/>
        <!-- 开启订阅模式 -->
        <property name="pubSubDomain" value="true"/>
        <property name="destination" ref="sitLogTopic"/>
        <!-- 持久订阅 -->
        <property name="subscriptionDurable" value="true"/>
        <!---接收客户端ID,在持久化时,客户端不在线时消息就存在数据库里,直到被这个ID的客户端消费掉-->
        <property name="clientId" value="${mq.env}.lyt.log.consumer"/>
        <property name="messageListener" ref="logListener"/>
        <!-- 消息应答方式
            Session.AUTO_ACKNOWLEDGE=1  消息自动签收
            Session.CLIENT_ACKNOWLEDGE=2  客户端调用acknowledge方法手动签收
            Session.DUPS_OK_ACKNOWLEDGE=3  不必必须签收,消息可能会重复发送
        -->
        <property name="sessionAcknowledgeMode" value="1"/>
    </bean>


    <bean id="smsTopic" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="${mq.env}.lyt.sms"/>
    </bean>
    <bean id="smsListener" class="com.lyt.msg.mq.SmsListener"/>
    <bean id="smsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="myConsumerFactory"/>
        <property name="pubSubDomain" value="true"/>
        <property name="destination" ref="smsTopic"/>
        <property name="subscriptionDurable" value="true"/>
        <property name="clientId" value="${mq.env}.lyt.sms.consumer"/>
        <property name="messageListener" ref="smsListener"/>
        <property name="sessionAcknowledgeMode" value="1"/>
    </bean>

    <bean id="sitUserTopic" class="org.apache.activemq.command.ActiveMQTopic">
        <constructor-arg value="${mq.env}.lyt.sit.user"/>
    </bean>
    <bean id="sitUserListener" class="com.lyt.msg.mq.SitUserListener"/>
    <bean id="sitUserListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="myConsumerFactory"/>
        <property name="pubSubDomain" value="true"/>
        <property name="destination" ref="sitUserTopic"/>
        <property name="subscriptionDurable" value="true"/>
        <property name="clientId" value="${mq.env}.lyt.sit.user.consumer"/>
        <property name="messageListener" ref="sitUserListener"/>
        <property name="sessionAcknowledgeMode" value="1"/>
    </bean> 

</beans>

建立消息处理对象用来消费消息

package com.lyt.msg.mq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.lyt.base.vo.MQSitUser;
import com.lyt.msg.biz.BizSitUser;

@Component
public class SitUserListener implements MessageListener {
    private Log log = LogFactory.getLog(SitUserListener.class);

    @Autowired
    private BizSitUser bizSitUser;

    @Override
    public void onMessage(Message message) {        
        MQSitUser mqSitUser = null;
        ObjectMessage objectMessage = (ObjectMessage)message;
        try {
            mqSitUser = (MQSitUser) objectMessage.getObject();
        } catch (JMSException e) {
            log.error(e.getMessage());
            return;
        }
        if(mqSitUser.getActionType() == MQSitUser.ACTION_THIRD_USER) {
            bizSitUser.addUserByThird(mqSitUser);
        } else if(mqSitUser.getActionType() == MQSitUser.ACTION_BIND_USER) {
            bizSitUser.bindThird(mqSitUser);
        } else if(mqSitUser.getActionType() == MQSitUser.ACTION_UPD_USER) {
            bizSitUser.updUser(mqSitUser);
        } else if(mqSitUser.getActionType() == MQSitUser.ACTION_TRESPASS_USER) {
            bizSitUser.addUserByMobile(mqSitUser);
        }
    }
}

创建消息发送工具类

package com.lyt.base.util;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

import com.lyt.base.vo.MQSitLog;
import com.lyt.base.vo.MQSitUser;
import com.lyt.base.vo.MQSmsInfo;
public class MQUtil {
    public static void sendLogMsg(JmsTemplate myJmsTemplate, Destination sitLogTopic, MQSitLog mqSitLog) {
        myJmsTemplate.send(sitLogTopic, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                ObjectMessage objectMessage = session.createObjectMessage();
                objectMessage.setObject(mqSitLog);
                return objectMessage;
            }
        });
    }

    public static void sendSms(JmsTemplate myJmsTemplate, Destination smsTopic, MQSmsInfo mqSmsInfo) {
        myJmsTemplate.send(smsTopic, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                ObjectMessage objectMessage = session.createObjectMessage();
                objectMessage.setObject(mqSmsInfo);
                return objectMessage;
            }
        });
    }

    public static void sendSitUserMsg(JmsTemplate myJmsTemplate, Destination sitUserTopic, MQSitUser mqSitUser) {
        myJmsTemplate.send(sitUserTopic, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                ObjectMessage objectMessage = session.createObjectMessage();
                objectMessage.setObject(mqSitUser);
                return objectMessage;
            }
        });
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值