同步接收
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、運行測試
程序啟動后,會一直處于監聽狀態,堅挺到消息,會對其進行處理。