2017-04-09 49 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實現了發佈和訂閱語義。當您發佈消息時,它會發送給所有感興趣的訂戶 - 因此爲零到許多訂戶將收到消息的副本。