为什么在ActiveMQ中嵌入线程?

时间:2017-04-09 07:09:09

标签: java multithreading activemq

我正在检查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();
        }

    }

1 个答案:

答案 0 :(得分:1)

  

只是想知道线程在哪里,或者只是那个   更适合环境或其他什么?

通常,当您向jms主题发送消息时,它适用于多个使用者,否则,您将选择一个jms队列。 您的代码允许运行从同一jms主题并行使用消息的多个消费者(注意,您已在run()方法中对主题名称进行了硬编码)。它与JMS环境或MQ无关,它只是使用多个使用者并行使用消息。

你可以参考以下here中的文字(强调我的),它讲述了jms主题原则上如何运作。

  

在JMS中,主题实现了发布和订阅语义。当你   向所有感兴趣的订阅者发布消息 -   因此零到许多订阅者将收到消息的副本