同步接收
jmsTemplate.receive()
一個(gè)線程在工作,沒接收到就等待,接收到了就往下執(zhí)行直到程序結(jié)束;
如果想循環(huán)不斷地接收,那么就寫個(gè)while true循環(huán)。
使用監(jiān)聽器監(jiān)聽ActiveMQ目的地,當(dāng)有消息的時(shí)候,回調(diào)onMessage方法對消息進(jìn)行處理,ActiveMQ與Spring集成異步接收消息的步驟如下:
1、創(chuàng)建普通的maven項(xiàng)目,異步接收消息模塊12-activemq-spring-receiver-async
2、在pom.xml文件中添加依賴(可以從前面receiver項(xiàng)目中拷貝)
3、配置applicationContext.xml
這里不需要掃描包了,只需要導(dǎo)入jms的配置即可
<import resource="applicationContext-jms.xml"/>
4、配置applicationContext-jms.xml
JmsTemplate只給我們提供了同步接收的方法,所以這里我們不需要對其進(jìn)行配置。
!-- 配置一個(gè)連接工廠 -->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.235.128:61616"/>
</bean>
<!-- 配置一個(gè)sping監(jiān)聽器的容器 -->
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!--引用連接工廠-->
<property name="connectionFactory" ref="connectionFactory"/>
<!--指定監(jiān)聽的目的地-->
<property name="destinationName" value="springQueue"/>
<!--監(jiān)聽到消息后,會(huì)回調(diào)onMessage方法,我們在自定義的監(jiān)聽器中對onMessage方法進(jìn)行重寫,完成消息的接收-->
<property name="messageListener" ref="myMessageListener" />
</bean>
<!-- 我們自定義的一個(gè)消息監(jiān)聽器 -->
<bean id="myMessageListener" class="com.bjpowernode.activemq.listener.MyMessageListener" />
5、創(chuàng)建自定義監(jiān)聽器,實(shí)現(xiàn)MessageListener接口,并在實(shí)現(xiàn)的onMessage方法中接收消息
ublic class MyMessageListener implements MessageListener{
public void onMessage(Message message) {
if(message instanceof TextMessage){
try {
String text = ((TextMessage) message).getText();
System.out.println("監(jiān)聽器異步接收到的消息為:" + text);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
6、編寫測試類Test進(jìn)行測試
public class Test {
public static void main(String[] args) {
//這里只需要啟動(dòng)Spring容器,就會(huì)創(chuàng)建監(jiān)聽器對象
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
7、運(yùn)行測試
程序啟動(dòng)后,會(huì)一直處于監(jiān)聽狀態(tài),堅(jiān)挺到消息,會(huì)對其進(jìn)行處理。