ActiveMQ整合Spring
我是在本地windows的64位MQ, 运行win64下的activemq.bat启动消息服务器。
消息监听方
工程结构如下,创建了两个点对点消息监听对象,两个主题消息监听对象。
consumer.xml配置监听方
<!-- 消息队列链接工厂 -->
<amp:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
<!-- spring管理jms链接工厂的工厂 -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="10"/>
</bean>
<jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory">
<jms:listener destination="myQueue" ref="queueReceiver1"/>
<jms:listener destination="myQueue" ref="queueReceiver2"/>
</jms:listener-container>
<jms:listener-container destination-type="topic" container-type="default" connection-factory="connectionFactory">
<jms:listener destination="myTopic" ref="topicReceiver1"/>
<jms:listener destination="myTopic" ref="topicReceiver2"/>
</jms:listener-container>
启动监听器
public class AppRun {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
context.start();
System.out.println("-----消息监听方启动了------");
}
}
这时,ActiveMQ 管理界面可以看到两个queue consumer, 两个topic consumer
消息发送方
用了一个简单的springMVC来 产生消息
controller
@Controller
@RequestMapping(value = "/sendmessage")
public class ProducerController {
@Autowired
private IProducer producer;
@RequestMapping(value = "/queue")
public void sendQueue() {
producer.sendQueue("myQueue", "队列消息");
System.out.println("发了队列消息");
}
@RequestMapping(value = "/topic")
public void sendTopic() {
producer.sendTopic("myTopic", "主题消息");
System.out.println("发了订阅消息");
}
}
Service
@Service
public class Producer implements IProducer {
@Autowired
private JmsTemplate jmsQueueTemplate;
@Autowired
private JmsTemplate jmsTopicTemplate;
public void sendQueue(String queueName, final String message) {
jmsQueueTemplate.send(queueName, session -> session.createTextMessage(message) );
}
public void sendTopic(String topicName, final String message) {
jmsTopicTemplate.send(topicName, session -> session.createTextMessage(message) );
}
}
jmsQueueTemplate, jmsTopicTemplate的配置如下
<!-- 消息队列链接工厂 -->
<amp:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
<!-- spring管理jms链接工厂的工厂 -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="10"/>
</bean>
<!-- 点对点消息生产者 -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"/>
<property name="pubSubDomain" value="false"/>
</bean>
<!-- 发布订阅消息生产者 -->
<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"/>
<property name="pubSubDomain" value="true"/>
</bean>
其中连接工厂的配置和监听方的一致。
部署到tomcat运行以后,调用接口产生消息,监听方即可接收到消息
发送四次队列消息,发现队列消息两个监听器交替接收消息
主题消息订阅方都可以收到
源码链接 http://download.csdn.net/download/u013041642/9942264
还没有评论,来说两句吧...