目标:在spring集成环境中,使用activemq服务,mq服务要求是集群的。单个mq服务的宕机,不能影响生产者推送消息到队列,也不能影响消费者从队列中消费消息。
方案:采用activemq官网提供的master/slave的模式
官网提供了三种实现方案,时间紧、任务重,选最简单的方式
Shared File System来实现。
该实验环境基于windows系统,详细步骤如下:
一、activemq的master/slave配置
该配置是activemq.xml
1、修改mq数据存储为共享存储路径,距离如下:
2、配置该mq服务为master/slave模式;
a、给该mq起个单独的名字;
b、指定mq数据的存储路径;
c、使用jmx监控broker(即该mq服务,用以扫描当master挂掉之后,它是否应该从slave成为master);
d、设置mq消息数据可持久化(用以master挂掉后,新升任的master可从持久数据中恢复未消费的mq消息);
这一块的配置如下:
3、拷贝activemq安装包,修改mq监听端口;
本次实验仅使用两个mq服务分别为61617、61618;
activemq自带jetty容器提供管理界面,所以启动两个mq服务的话,jetty的端口也需要修改。在jetty.xml配置。另外,如果访问mq管理界面要求输入账号密码,则账号密码也是在这个配置里面。本实验未配置该账号密码。
二、在spring环境中使用activemq
1、配置jmsFactory
2、配置JMSTemplate
3、实现ServerProvider(消费者监听由它提供)
4、实现ActivemqConsummerAbstract
它主要有两个功能:
a、具体消费者类初始化后,自动放到activemq监听线程中;
b、接收消息,并将该消息传递给具体的消费者类消费;
5、实现ActivemqProducerAbstract
它的功能主要是调用jmsTemplate进行消息推送
6、简单类图说明如下:
7、最后测试类结构如下:
8、share file模式的master/slave的实验结论
a、最先启动的activemq服务,会成为master;
b、master对share file施加一个锁;
c、后续启动的activemq服务将成为slave,该slave会不断进行扫描,期望获得share file的使用权。当master挂掉,释放掉对share file的锁后,某个slave将会成为master。