呼叫MessageProducer.setTimeToLive()与TextMessage.setJMSExpiration()?之间有区别吗?
我可以从文档中看到javax.jms.MessageProducer.setTimeToLive()表示它
设置消息系统应保留生成的消息的发送时间的默认时间长度(以毫秒为单位).
并且javax.jms.Message.setJMSExpiration()表示它
设置邮件的到期值.
那听起来和我一样.我应该继续将两者设置为相同的值吗?
您不应为Message(或TextMessage,如您的示例中)设置过期设置.来自Java EE 5 Javadocs的文本令人困惑,并且在最近的版本中得到了改进:
此方法仅供JMS提供程序在发送消息时设置此字段.客户端无法使用此消息来配置消息的到期时间.此方法是公共的,允许JMS提供程序在发送其实现不是自己的消息时设置此字段.
这意味着您不应该使用Message#setJMSExpiration()设置邮件过期,因为提供程序将在发送邮件时覆盖该值.
您应该使用它MessageProducer来设置所有消息的超时,MessageProducer#setTimeToLive()或者,如果您只想设置特定消息的到期时间,请使用MessageProducer#send(Message, int, int, long)Shashi的答案中所示.仅在这种情况下,"按消息"设置才会覆盖MessageProducer设置.
有一个关键的区别,MessageProducer.setTimeToLive()即为该生产者发送的所有消息设置相同的消息到期时间。另一方面,TextMessage.setJMSExpiration()根据每条消息设置消息到期时间。每条消息上设置的到期时间将覆盖在 上设置的到期时间MessageProducer。
JMS还指定了一种在调用方法时设置消息过期时间的方法MessageProducer.send。
void send(Message message, int deliveryMode,int priority, long timeToLive)
Run Code Online (Sandbox Code Playgroud)
您可以在 或 上设置消息过期MessageProducer时间TextMessage。无需两者都设置。
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |