当使用 InOut 范例将请求/响应消息发送到 JMS 端点时,Camel JMS documentation描述了如何在请求消息上设置消息过期时间,但没有描述请求消息的使用者发送响应消息时是否设置超时(JMS 过期)。该文档确实描述了replyToDeliveryPercient URI选项,消费者可以设置该选项来指定它发送的响应消息应该是非持久的,但我没有看到任何可以让您指定响应消息是否设置过期日期的内容。
如果在一定时间内未使用响应消息(例如,因为请求的生产者在读取消息之前已被杀死),是否有某种方法可以确保响应消息过期(以便它们可以自动从代理中删除)响应其最终请求),而不实现自定义 ActiveMQ 消费者并失去使用 Camel 的好处?我控制生产者和消费者,因此可以在需要进行的任何一方进行更改(并且我知道消费者端可能需要完成此操作);这里唯一的标准是 Camel 必须保留处理消息并响应回复消息的方法,因为必须手动实现它比使用持久回复消息更糟糕。
最佳答案
在消息上设置过期时间(JMSExpiration
header )的唯一方法是从其生产点(即由生产者)。
在您的情况下,请求的使用者应使用 JMS 组件的 URI 选项 显式设置
,并且请求方无法设置此选项。JMSExpiration
日期1 timeToLive
1) JMS 规范指出,JMS 客户端不应直接设置 JMSExpiration
,而应指定生存时间。然后将 header 计算为生存时间与当前 GMT 值的总和。
关于jms - Camel 响应消息上的 TimeToLive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26186374/