ActiveMQ队列和消费者

时间:2014-05-10 04:28:13

标签: java activemq

我有一个场景,我有超过4个客户端,我想向所有客户端发送单个队列消息。我没有承认客户端。所以任何人都可以从队列中获取该消息。但情况是我想知道消费者消费者的数量。任何人都可以帮我计算消费者数量。

下面是我写的代码。

  public static boolean sendMessage(String messageText)
  { 
    try {     
      StompConnection connection = new StompConnection(); 
      HashMap<String, String> header = new HashMap<String, String>();
      header.put(PERSISTENT, "true");
      connection.open(URLhost, port); 
      connection.connect("", ""); 
      connection.begin("MQClient");
      Thread.sleep(100);
      connection.send(queuePath, messageText, "MQClient", header); 
      connection.commit("MQClient");                
      connection.disconnect(); 
      return true;
    } catch (Exception e) { 
         throw new BasicException(AppLocal.getIntString("ActiveMQ service ERROR"), e);
    } 
  } 

  public static String receiveMessage() {
      try {
      StompConnection connection = new StompConnection(); 
      connection.open(URLhost, port); 
      connection.connect("", ""); 
      connection.subscribe(queuePath, Subscribe.AckModeValues.INDIVIDUAL); 
      connection.begin("MQClient");
      Thread.sleep(1000);//below not a good NO DATA test .. worked by making thread sleep a while
      if (connection.getStompSocket().getInputStream().available() > 1) 
      {
          StompFrame message = connection.receive(); 
          connection.commit("MQClient");
          connection.disconnect();
          return message.getBody();
      }
      else
          return "";

      } catch (Exception e) { 
          e.printStackTrace(); 
      }
      return "";
  }

2 个答案:

答案 0 :(得分:2)

如果您要写入队列,那么只有一个消费者会收到该消息。点对点消息传递的整个目标是只有一个消费者会收到消息。

如果您想发送消息并让所有消费者接收消息,那么您需要使用主题而不是队列。

答案 1 :(得分:1)

如果切换到某个主题,多个客户端可以使用相同的消息。

您可以通过订阅ActiveMQ.Advisory.MessageConsumed.Topic

来确定消息的消耗量