2016-03-04 5 views
2

В настоящее время я начал работать над темами JMS с помощью ActiveMQ. У меня есть созданных подписчиков и просроченных подписчиков через код JAVA (см. Ниже), и я также получил сообщения в стороне подписчиков.JMS Тема публикации/подписчик

Publisher.Java

public static void createConnectionAndSendMessage(String ipAddress) 
    { 
     try 
     { 
      ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://"+ipAddress+":61617"); 

      Connection connection = factory.createConnection(); 
      connection.start(); 

      Session topicSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      Topic topic = topicSession.createTopic("Test-Topic"); 

      MessageProducer producer = topicSession.createProducer(topic); 
      producer.setDeliveryMode(DeliveryMode.PERSISTENT); 

      ObjectMessage message = topicSession.createObjectMessage(); 

      TopicTO topicTO = new TopicTO(); 
      topicTO.setId(i); 
      topicTO.setName("Sample"); 

      message.setStringProperty("s_id", "Sample"); 
      message.setObject((Serializable) topicTO);     

      producer.send(message); 
      System.out.println("message sent successfully"); 
     } 
    } 
    catch(JMSException e) 
    { 
     System.out.println("error :" + e); 
    } 
} 

Subscriber.java

public void createConnectionAndReceiveMessage(String clientId, String ipAddress) 
    { 
     try 
     { 
      ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://"+ipAddress+":61617"); 
      Connection connection = connectionFactory.createConnection(); 
      connection.setClientID(clientId); 
      connection.start();    
      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      Topic topic = session.createTopic("Test-Topic"); 

      String selector = "s_id = 'Sample'"; 
      System.out.println("selector : '"+selector+"'...."); 
      TopicSubscriber consumer = session.createDurableSubscriber(topic, "Sub1", selector, true); 

      consumer.setMessageListener(new TopicMessageListener());    

    } 
    catch(Exception e) 
    { 
     System.out.println("error :" + e); 
    } 
} 

У меня есть некоторые сомнения в теме те следует,

Как я могу проверить, что сколько подписчики активно ищет сообщение в теме с использованием Java JMS?

Как я могу получить список активных активных подписчиков из темы?

Есть ли у нас возможность удалить опубликованное сообщение в теме?

Помогите мне в этих условиях.
Заранее спасибо.

ответ

2

Публикация/подписка шаблона обмена сообщениями, издатель не знает о каких-либо подписчиках. Издатель будет публиковать сообщения в теме, размещенной на брокере, и брокер будет в свою очередь распространять эти сообщения любым подписчикам, зарегистрированным для этой темы. Если для темы нет подписчиков, сообщение будет просто отброшено.

Спецификация JMS не определяет API, который может получить информацию, которую вы ищете. Такие API-интерфейсы будут специфичными для JMS-провайдера, Active MQ в вашем случае. Эта ссылка может быть полезна: http://activemq.apache.org/advisory-message.html

Смежные вопросы