avtivityMQ之—springmvc集成avtivityMQ环境搭建

本文详细介绍了如何使用activityMQ作为消息中间件来发送微信通知,包括环境配置、spring配置文件、Java代码实现及运行测试结果。通过实践操作加深了对activityMQ的使用和原理的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

工作中有用到activitymq作为消息中间件来发微信通知,不过环境都是配好了的,只是按着那个流程使用,自己也有看一些资料,不过还是不能很好的理解avtivityMQ的使用和原理,所以用业余时间来一遍,顺便全面的学习一遍avtivityMQ,和工作上用的版本一样都是activityMQ5.10.0。

这里将不再列出详细的配置文件信息,springmvc环境是在我写的另一篇博文的基础上搭建的springmvc环境搭建

准备工作

既然是使用的apache的activeMQ作为JMS的实现,那么首先我们应该到apache官网上下载activeMQ(http://activemq.apache.org/download.html),进行解压后运行其bin目录下面的win23或者win64(具体看自己的系统是多少位的)里的activemq.bat文件启动activeMQ。详情参照ActiveMQ—Windows操作系统中如何安装启动ActiveMQ

spring配置文件

spring-beans.xml中的配置

<!-- 配置一下常量到prop.properties,方便修改 -->
<context:property-placeholder location="classpath:prop.properties"/>

<jms:listener-container connection-factory="mqConnectionFactory">
        <jms:listener destination="${activemq.demoYueEventQueueName}" ref="yueEventListener" />
</jms:listener-container>

prop.properties中的配置

# activemq
activemq.brokerURL=tcp://localhost:61616
activemq.sessionCacheSize=10
activemq.useAsyncSend=true
activemq.defaultDestinationName=Tm
activemq.default.pubSubDomain=false
activemq.mongoDBQueueName=TmMongoDB
activemq.mongoDBQueueName.pubSubDomain=false
activemq.eventQueueName=Event
activemq.demoYueEventQueueName=DemoYueEvent
activemq.event.pubSubDomain=false

java代码

控制器代码

@RequestMapping("/testMethod")
    public String test(HttpSession session, HttpServletRequest req) {
        String message = "TestAction需要传送一条消息";
        System.out.println(message);
        //getBean方法:使用applicationContext获取相应对象
        SpringContextUtil.getBean(EventManager.class).createMessage(message);
        return null;
    }

生产者代码

public class EventManagerImpl implements EventManager {

    @Value("${activemq.demoYueEventQueueName}")
    public String demoYueEventQueueName;

    @Autowired
    JmsTemplate mongoDBJmsTemplate;

    /**
     * 创建并向队列里添加事件
     * @param yueEvent
     */
    @Override
    public void createMessage(final String message){
        MessageCreator messageCreator = new MessageCreator() {

            public Message createMessage(Session session) throws JMSException {
                MapMessage msg = session.createMapMessage();
                String createMessage = "我是生成者,创建消息"+message;
                System.out.println(createMessage);
                msg.setString("createMessage", createMessage);
                return msg;
            }
       };
       mongoDBJmsTemplate.send(demoYueEventQueueName, messageCreator);
    }
}

消费者代码

@Service
public class YueEventListener implements SessionAwareMessageListener<MapMessage> {

    @Value("${activemq.demoYueEventQueueName}")
    public String demoYueEventQueueName;

    @Override
    public void onMessage(MapMessage message, Session session) throws JMSException {
        String createMessage = message.getString("createMessage");
        System.out.println("收到消息——"+createMessage);
    }
}

JmsTemplate的构建代码,这里采用的是spring的@Configuration @Bean注解方法,来构建并且注入到spring容器中。

@Configuration
public class SpringActiveMQConfig {

    Logger log = org.slf4j.LoggerFactory.getLogger(getClass());
    @Value("${activemq.brokerURL}")
    private String  brokerURL;//url
    @Value("${activemq.sessionCacheSize}")
    private int sessionCacheSize;//连接数
    @Value("${activemq.mongoDBQueueName}")
    private String  mongoDBQueueName;
    @Value("${activemq.mongoDBQueueName.pubSubDomain}")
    private boolean mongoDBQueueName_pubSubDomain;
    private boolean useAsyncSend = true;//采用异步方式,性能更快

    public @Bean
    ActiveMQConnectionFactory activeMQConnectionFactory() throws Exception {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
        activeMQConnectionFactory.setBrokerURL(brokerURL);
        activeMQConnectionFactory.setUseAsyncSend(useAsyncSend);
        return activeMQConnectionFactory;
    }

    public @Bean
    CachingConnectionFactory mqConnectionFactory() throws Exception {
        log.info("creating bean mqConnectionFactory");
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(activeMQConnectionFactory());
        connectionFactory.setSessionCacheSize(sessionCacheSize);

        return connectionFactory;
    }

    public @Bean
    JmsTemplate mongoDBJmsTemplate() throws Exception {
        JmsTemplate jmsTemplate = new JmsTemplate(mqConnectionFactory());
        jmsTemplate.setDefaultDestinationName(mongoDBQueueName);
        jmsTemplate.setPubSubDomain(mongoDBQueueName_pubSubDomain);
        return jmsTemplate;
    }
}

运行测试结果

这里写图片描述

小结

这里我只是展示了一个简单的activityMQ环境代价的流程。跟多的知识还需要深入的去学习。

推荐两篇博文:
JMS简介与ActiveMQ实战
ActiveMQ基本介绍

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值