2017-04-09 45 views
1

我正在检查ActiveMQ示例,其中大部分示例都嵌入了Thread。我采取了一个例子,并删除线程部分,并运行它,按预期工作。只是想知道线程在哪里出现,或者它只是更适合环境或什么?请帮我理解。谢谢。为什么在ActiveMQ中嵌入线程?

示例代码:

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

您可以发布示例或指向参考吗? – developer

+1

您通常会使用线程来避免阻止主要操作流或利用其他并行性。 – Henry

+1

可能是为了确保发件人在放入东西时不会阻止。但很难说没有任何代码可以看。 – GhostCat

回答

1

只是想知道线程进入画面的话,或者它只是 更符合自己环境什么的?

一般来说,当您将消息放置到jms主题时,它指向多个消费者,否则,您将选择一个jms队列。 您的代码允许从同一个jms主题(注意,您已在run()方法中对主题名称进行硬编码)并行地使用多个消费者来运行。这与JMS环境或MQ无关,只是使用多个使用者并行使用消息。

你可以参考here中的下面的文字(重点是我的),它说明了jms主题是如何工作的。

在JMS中,Topic实现了发布和订阅语义。当您发布消息时,它会发送给所有感兴趣的订户 - 因此为零到许多订户将收到消息的副本。