- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
调用 MessageProducer.setTimeToLive()
与调用 TextMessage.setJMSExpiration()
有区别吗?
我可以从文档中看到 javax.jms.MessageProducer.setTimeToLive()说是
Sets the default length of time in milliseconds from its dispatch time that a produced message should be retained by the message system.
还有那个javax.jms.Message.setJMSExpiration()说是
Sets the message's expiration value.
这些对我来说听起来是一样的。我应该继续将两者设置为相同的值吗?
最佳答案
您不应为 Message
(或 TextMessage
,如您的示例)设置过期设置。来自 Java EE 5 Javadocs 的文本令人困惑,并且在 recent versions 中得到了改进:
This method is for use by JMS providers only to set this field when a message is sent. This message cannot be used by clients to configure the expiration time of the message. This method is public to allow a JMS provider to set this field when sending a message whose implementation is not its own.
这意味着您不应使用 Message#setJMSExpiration()
来设置消息过期时间,因为提供者将在发送消息时覆盖该值。
您应该改为使用其 MessageProducer
为所有使用 MessageProducer#setTimeToLive()
的消息设置超时,或者,如果您只想为特定消息设置到期时间,使用 MessageProducer#send(Message, int, int, long)
这样做,如 Shashi 的回答所示。只有在这种情况下,“每条消息”设置才会覆盖 MessageProducer
的设置。
关于java - JMS MessageProducer.setTimeToLive() 与 TextMessage.setJMSExpiration(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31709353/
调用 MessageProducer.setTimeToLive() 与调用 TextMessage.setJMSExpiration() 有区别吗? 我可以从文档中看到 javax.jms.Mess
我是一名优秀的程序员,十分优秀!