![](/img/trans.png)
[英]Unable to send message to remote ActiveMQ Artemis embedded in JBoss EAP 7.2
[英]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.