簡體   English   中英

如何知道偵聽器是否在JMS中獲取消息?

[英]How to know if a listener gets the message in JMS?

我正在使用Spring JMS和ActiveMQ異步地將消息從一個發送者發送到多個偵聽器。 所有偵聽器都訂閱ActiveMQ主題,以便可以將消息傳遞給它們。 我想知道特定的偵聽器是否從發件人那里獲取了消息。 有沒有辦法實現這個目標?

編輯:添加了JMS發送方和偵聽器類

這是我的郵件發件人類:

public class CustomerStatusSender {
    private JmsTemplate jmsTemplate;
    private Topic topic;

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    public void setTopic(Topic topic) {
        this.topic = topic;
    }

    public void simpleSend(final String customerStatusMessage) {
        jmsTemplate.send(topic, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                TextMessage message = session.createTextMessage("hello from sender.");
                message.setStringProperty("content", customerStatusMessage);
                return message;
            }
        });
    }
}

這是消息監聽器之一:

public class CustomerStatusListener implements MessageListener {
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                System.out.println("Subscriber 1 got you! The message is: "
                        + message.getStringProperty("content"));
            } catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        }
    }
}

在sender類中調用simpleSend()方法后,訂閱此主題的所有偵聽器都將異步獲取此消息。 但我想知道這個特定的CustomerStatusListener收到來自郵件發件人的郵件。 如何異步進行? 我假設我不能在發送者和監聽器中使用ReplyTo ,如果我想異步地執行其中一個答案。 我需要在發送方和偵聽器類中添加什么才能從偵聽器獲取消息接收確認?

我之前遇到過這樣的情況。 我使用了兩個主題來處理場景。 第一個主題用於發布,第二個主題用於收據。 這是我在我的應用程序中的流程。

  1. 發件人向第一個主題發布“請求”消息。
  2. 偵聽器在偵聽Message <Request>對象時收到消息。
  3. 處理完消息后,Listener將Message <Ack>對象發送到2nd Topic。
  4. 發件人依次偵聽Message <Ack>對象收到它。 我添加了有關偵聽器的可識別信息,以找出哪些偵聽器最終得到了我的請求消息<Request>。

我希望它能解決你的問題..

您必須設置replyTo並在收到消息時讓偵聽器回復。 您可以為回復創建TemporaryQueue。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM