同步接收
jmsTemplate.receive()
一个线程在工作,没接收到就等待,接收到了就往下执行直到程序结束;
如果想循环不断地接收,那么就写个while true循环。
使用监听器监听ActiveMQ目的地,当有消息的时候,回调onMessage方法对消息进行处理,ActiveMQ与Spring集成异步接收消息的步骤如下:
1、创建普通的maven项目,异步接收消息模块12-activemq-spring-receiver-async
2、在pom.xml文件中添加依赖(可以从前面receiver项目中拷贝)
3、配置applicationContext.xml
这里不需要扫描包了,只需要导入jms的配置即可
<import resource="applicationContext-jms.xml"/>
4、配置applicationContext-jms.xml
JmsTemplate只给我们提供了同步接收的方法,所以这里我们不需要对其进行配置。
!-- 配置一个连接工厂 -->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.235.128:61616"/>
</bean>
<!-- 配置一个sping监听器的容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!--引用连接工厂-->
<property name="connectionFactory" ref="connectionFactory"/>
<!--指定监听的目的地-->
<property name="destinationName" value="springQueue"/>
<!--监听到消息后,会回调onMessage方法,我们在自定义的监听器中对onMessage方法进行重写,完成消息的接收-->
<property name="messageListener" ref="myMessageListener" />
</bean>
<!-- 我们自定义的一个消息监听器 -->
<bean id="myMessageListener" class="com.bjpowernode.activemq.listener.MyMessageListener" />
5、创建自定义监听器,实现MessageListener接口,并在实现的onMessage方法中接收消息
ublic class MyMessageListener implements MessageListener{
public void onMessage(Message message) {
if(message instanceof TextMessage){
try {
String text = ((TextMessage) message).getText();
System.out.println("监听器异步接收到的消息为:" + text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
6、编写测试类Test进行测试
public class Test {
public static void main(String[] args) {
//这里只需要启动Spring容器,就会创建监听器对象
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
7、运行测试
程序启动后,会一直处于监听状态,坚挺到消息,会对其进行处理。