Jms TimeToLive on Camel响应消息

Jms TimeToLive on Camel响应消息,jms,apache-camel,Jms,Apache Camel,当使用InOut范例向JMS端点发送请求/响应消息时,描述了如何在请求消息上设置消息过期,但没有描述响应消息在由请求消息的使用者发送时是否设置了超时JMS过期。文档确实描述了replyToDeliveryPersistent URI选项,消费者可以将该选项设置为指定其发送的响应消息应为非持久性的,但我没有看到任何允许您指定响应消息是否将设置过期日期的内容 是否有某种方法可以确保响应消息将过期,以便在一定时间内未使用响应消息时自动从代理中删除响应消息,例如,因为请求的生产者在读取对其最终请求的响应

当使用InOut范例向JMS端点发送请求/响应消息时,描述了如何在请求消息上设置消息过期,但没有描述响应消息在由请求消息的使用者发送时是否设置了超时JMS过期。文档确实描述了replyToDeliveryPersistent URI选项,消费者可以将该选项设置为指定其发送的响应消息应为非持久性的,但我没有看到任何允许您指定响应消息是否将设置过期日期的内容


是否有某种方法可以确保响应消息将过期,以便在一定时间内未使用响应消息时自动从代理中删除响应消息,例如,因为请求的生产者在读取对其最终请求的响应之前已被杀死,没有实现定制的ActiveMQ使用者并失去使用Camel的好处?我同时控制生产者和消费者,因此,无论需要在哪一方进行更改,我都知道消费者端是可能需要进行更改的地方;这里唯一的标准是驼峰必须仍然是处理消息并用回复消息进行响应的方法,因为必须手动实现这一点比使用持久回复消息更糟糕。

在消息上设置过期时间JMSExpiration头的唯一方法是从消息的生产点(即生产者)开始

在您的情况下,请求的使用者应该使用JMS组件的URI选项timeToLive明确地设置JMSExPrivation日期1,并且无法从请求端设置此选项


1 JMS规范指出,JMS客户机应该指定生存时间,而不是直接设置JMSExpiration。然后将标头计算为生存时间和当前GMT值之和。

没错,URI选项为replyToDeliveryPersistent;我已经更新了问题来解决这个问题。我知道我需要在消费者方面应用这一点,这没有问题,因为我控制了两者;replyToDeliveryPersistent URI选项也应用于消费者的URI,所以我希望在那里设置它。实际上,我解释过,作为对另一个答案的回应,作者随后删除了这个答案,所以我更新了我的问题,明确地说明了这一点。所以我认为你的建议是应用JMSExpiration头,实际上它可以直接发送,通过Camel处理器或直接在Camel DSL中查看响应消息。这比我希望的要麻烦得多,我可能会提交一份JIRA for Camel,添加一个replyToTimeToLive URI选项以使其更简单,但它会起作用。@Tim我很抱歉,但我现在很困惑。让我将输入/输出端称为客户端应用程序,另一端称为服务器应用程序。客户端应用程序将发送请求消息并等待答复,服务器应用程序将接收客户端应用程序发送的请求消息,对其进行处理,生成答复消息并将其发送给正在等待的客户端应用程序。现在,您希望客户端应用程序指定由服务器应用程序生成和发送的回复消息的JMSExpiration,我没有弄错吗?因此,从服务器应用程序端设置timeToLive URI选项应该解决这个问题。你为什么不喜欢这个呢?你是对的,服务器应用程序上的timeToLive URI选项正是我想要的。我想我已经测试过了,并且看到它没有设置JMSExpiration,但是我一定没有正确地测试它。感谢您花时间完成这项工作,并让我重新测试URI选项。如果你编辑你的答案,指出timetoliveuri选项符合我的需要,这样未来的读者就不必仔细阅读这些评论,我会接受它并奖励你。