我正在检查ActiveMQ示例,我看到的大多数示例都嵌入了Thread。我拿了一个例子并删除了线程部分并运行它,按预期工作。只是想知道线程在哪里出现,或者只是更适合环境或其他东西?请帮我理解。感谢。
示例代码:
public class TopicConsumer implements Runnable {
ActiveMQConnectionFactory connectionFactory = null;
public TopicConsumer(ActiveMQConnectionFactory connectionFactory){
this.connectionFactory = connectionFactory;
}
@Override
public void run() {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination topicDestination = session.createTopic("CLIMATE");
MessageConsumer messageConsumer = session.createConsumer(topicDestination);
Message message = messageConsumer.receive();
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
session.close();
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:1)
只是想知道线程在哪里,或者只是那个 更适合环境或其他什么?
通常,当您向jms主题发送消息时,它适用于多个使用者,否则,您将选择一个jms队列。
您的代码允许运行从同一jms主题并行使用消息的多个消费者(注意,您已在run()
方法中对主题名称进行了硬编码)。它与JMS环境或MQ无关,它只是使用多个使用者并行使用消息。
你可以参考以下here中的文字(强调我的),它讲述了jms主题原则上如何运作。
在JMS中,主题实现了发布和订阅语义。当你 向所有感兴趣的订阅者发布消息 - 因此零到许多订阅者将收到消息的副本。