ActiveMQ topic 註解監聽

以前本身在玩activemq的時候瞭解到mq主要有2種監聽方式,一種是隊列Queue,另一種是主題Topicjava

隊列的實現方式比較簡單,後面在研究使用註解實現topic監聽的時候,,發現mq發送的消息監聽類沒法接收到,因而百度了一下也沒有標準答案,結合了一下源碼還有百度,發現須要先配置topic主題jsm監聽容器工廠,緣由是jms監聽默認的是隊列Queue形式接收的。如下是xml配置:spring

<!-- Topic主題jsm監聽容器工廠 -->
	<bean id="jmsListenerContainerTopicFactory"
		class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
		<property name="connectionFactory" ref="jmsConnectionFactoryExtend" />
		<!-- pub/sub模型(發佈/訂閱) -->
		<property name="pubSubDomain" value="true" />
	</bean>

而後在接收類註解使用containerFactory屬性,把剛剛配置的監聽容器工廠用上,代碼以下:session

package com.demo.activemq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.listener.adapter.MessageListenerAdapter;
import org.springframework.jms.support.converter.MessageConversionException;
import org.springframework.stereotype.Component;

@Component
public class TopicReceiver extends MessageListenerAdapter {

	@Override
	public void setDefaultResponseTopicName(String destinationName) {
		super.setDefaultResponseTopicName("MyTopic");
	}

	@JmsListener(destination = "MyTopic", concurrency = "1", containerFactory = "jmsListenerContainerTopicFactory")
	public void onMessage(Message message, Session session) {
		try {
			MessageBean bean = (MessageBean) getMessageConverter().fromMessage(message);
			// 告知activemq應用已收到消息
			message.acknowledge();
			System.out.println("topicReceiver1: " + bean.getMessage());
		} catch (MessageConversionException e) {
			e.printStackTrace();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}

這樣就能順利接收到mq發送的主題類型消息。ide

相關文章
相關標籤/搜索