簡體   English   中英

從producer.send獲取消息ID(消息)

[英]Get message ID from producer.send(message)

如何在發送消息后獲取MessageId但不消費消息?

我有這個方法將消息發送到隊列

public void sentMessage(JmsTemplate jmsTemplate, String queueName, String message, String uuid) {
        jmsTemplate.convertAndSend(queueName, message,
                new MessagePostProcessor() {
                    @Override
                    public Message postProcessMessage(Message message) throws JMSException {
                        message.setStringProperty("uuid", uuid);
                        log.info("CorId:{}", message.getJMSCorrelationID());
                        return message;
                    }
                });
    }

但是我需要在發送消息后找出id,但是沒有消費消息,我寫了這個方法:

public ApplicationRunner sentMessage(JmsTemplate jmsTemplate, String queueName, String message, String uuid) {
        return args -> {
            final AtomicReference<Message> msg = new AtomicReference<>();
            jmsTemplate.convertAndSend(queueName, message, m -> {
                msg.set(m);
                return m;
            });
            String message1 = msg.get().getJMSCorrelationID();
            log.info("CorId:{}", message1);
        };
    }

如何重寫一個方法,以便你可以在另一個類中調用它並獲取messageId?

我寫這個

public String sentMessage(JmsTemplate jmsTemplate, String queueName, String message, String uuid) throws JMSException {
        return t -> {
            final AtomicReference<Message> msg = new AtomicReference<>();
            jmsTemplate.convertAndSend(queueName, message, m -> {
                msg.set(m);
                return m;
            });
            return msg.get().getJMSCorrelationID();
        };
    }

但得到錯誤:lambda轉換的目標類型必須是一個接口

你為什么在那里使用lambda? 什么是t String不是Consumer<?>

public String sentMessage(JmsTemplate jmsTemplate, String queueName, String message, String uuid)
        throws JMSException {

    final AtomicReference<Message> msg = new AtomicReference<>();
    jmsTemplate.convertAndSend(queueName, message, m -> {
        msg.set(m);
        return m;
    });
    return msg.get().getJMSCorrelationID();
}

是你所需要的全部。

暫無
暫無

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

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