如何从 Spring 侦听器获取消息 ID

How to get the Message Id from a Spring Listener

我有以下代码:

@JmsListener(destination = "myQueue", containerFactory = "myFactory")
public void receiveMessage(MyClass message) {
    service.process(message);
}

现在,我想获取jms消息id。我知道我可以重写 MappingJackson2MessageConverter class 来执行此操作,但是是否有可能以更简单的方式执行此操作,例如在方法上使用第二个参数?

使用@Header注释:

@SpringBootApplication
public class So46794317Application {

    public static void main(String[] args) {
        SpringApplication.run(So46794317Application.class, args);
    }

    @Bean
    public ApplicationRunner runner(JmsTemplate template) {
        return args -> template.convertAndSend("foo", "bar");
    }

    @JmsListener(destination = "foo")
    public void receive(String in, @Header(JmsHeaders.MESSAGE_ID) String messageId) {
        System.out.println(in + ", id:" + messageId);
    }

}

结果:

bar, id:ID:host.local-50513-1508260336349-4:2:1:1:1