如果为消息设置了 STOMP "expires" header,则消息立即过期,无需等待 header 中设置的过期时间

If STOMP "expires" header is set for a message, the message expires right away without waiting for the expiry period set in the header

StompHeaders headers = new StompHeaders();
headers.set("persistent", "false");
headers.set("expires", "30000");
headers.set("priority", 9);

上面的配置是让消息30秒不会过期。但是消息在到达队列后立即过期。监听器甚至没有收到消息。

expires header 表示消息将过期的绝对时间(例如像 JMS 消息上的 JMSExpiration header),而不是延迟消息将过期。试试这个:

StompHeaders headers = new StompHeaders();
headers.set("persistent", "false");
headers.set("expires", System.currentTimeMillis() + 30000);
headers.set("priority", 9);

当您将 expires 设置为 30000 时,这会告诉代理消息在很久以前就已过期,因此它不会将消息传递给客户端。

顺便说一下,我删除了 durable header 因为它在 ActiveMQ Artemis 中没有任何作用。