我有一个标准的activeMQ经纪人
private static String localVMurl = "vm://localhost";
broker = new BrokerService();
broker.addConnector(localVMurl);
broker.start();一切都很好。我的目标是让消费者用特定的主题连接到代理。一旦检测到此连接,代理将传递消息,如果生产者正在主动生成该主题,或者代理将为该特定主题启动一个新的生成器。然而,要做到这一点,我需要有人检测什么时候一个新的消费者连接和要求一个特定的主题。
我的基本消费代码:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(remoterURL);
Connection connection = connectionFactory.createConnection();
connection.setClientID("clinet1");
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("some_topic");
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(new MyMessageListener());我可以从经纪人的日志中看到:
<161005 11:03:41> [.0.1:64433@5001] DEBUG tRegion - localhost adding destination: topic://ActiveMQ.Advisory.Consumer.Topic.some_topic所以我知道消费者是连接的,并且订阅了这个主题,我只需要以某种方式捕捉这个事件。
对如何做到这一点有什么想法吗?
发布于 2016-10-05 15:35:30
咨询信息是你需要的。每次您收到这段代码的消息时,这意味着您将有新的使用者启动或停止。
http://activemq.apache.org/advisory-message.html博士
示例:
//org.apache.activemq.advisory.AdvisorySupport.getDestinationAdvisoryTopic(Destination)
Destination advisoryDestination = AdvisorySupport.getConsumerAdvisoryTopic(topic )
MessageConsumer consumer = session.createConsumer(advisoryDestination);
consumer.setMessageListener(this);
public void onMessage(Message msg){
if (msg instanceof ActiveMQMessage){
try {
ActiveMQMessage aMsg = (ActiveMQMessage)msg;
ConsumerInfo consumer = (ConsumerInfo) aMsg.getDataStructure();
} catch (JMSException e) {
log.error("Failed to process message: " + msg);
}
}
}https://stackoverflow.com/questions/39877686
复制相似问题