发送消息后如何获取消息ID,但又不消耗消息?
我有这种将消息发送到队列的方法
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转换的目标类型必须是接口
答案 0 :(得分:0)
您为什么在那使用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();
}
是您所需要的。