高并发应用程序的 JMSTemplate 和设置属性
JMSTemplate and setting properties for a highly concurrent application
我有一个每天要处理数十万 (500,000+) 个 JMS 请求的应用程序。应用程序负责根据请求中收到的信息将消息路由到新的目的地。
在处理请求时,我还需要能够修改一些JMS 属性。例如,我需要设置消息的持久性、生存时间和优先级。因此,我的侦听器获取消息、询问请求消息、确定目的地,然后在 JMS 模板上设置这些属性。
我的问题是关于并发性和这些属性的设置。假设我正在处理 2 个并发请求。请求A设置持久化为持久化,请求B设置持久化为非持久化。将请求 A 设置为非持久性是否有任何危险?在模板级别设置这些属性会导致问题吗?
下面是一些设置这些属性的示例代码:
jmsTemplate.setExplicitQosEnabled(true);
jmsTemplate.setDeliveryPersistent(isPersistent);
jmsTemplate.setTimeToLive(timeToLive);
jmsTemplate.setPriority(priority);
jmsTemplate.send(createQueue(encoding));
在此先感谢您的帮助!
是;它会引起问题; Spring 集成使用 DynamicJmsTemplate
正是出于这个原因(在 ThreadLocal
中存储属性)。
它不支持您需要的所有属性,但您可以将其用作模型。
我有一个每天要处理数十万 (500,000+) 个 JMS 请求的应用程序。应用程序负责根据请求中收到的信息将消息路由到新的目的地。
在处理请求时,我还需要能够修改一些JMS 属性。例如,我需要设置消息的持久性、生存时间和优先级。因此,我的侦听器获取消息、询问请求消息、确定目的地,然后在 JMS 模板上设置这些属性。
我的问题是关于并发性和这些属性的设置。假设我正在处理 2 个并发请求。请求A设置持久化为持久化,请求B设置持久化为非持久化。将请求 A 设置为非持久性是否有任何危险?在模板级别设置这些属性会导致问题吗?
下面是一些设置这些属性的示例代码:
jmsTemplate.setExplicitQosEnabled(true);
jmsTemplate.setDeliveryPersistent(isPersistent);
jmsTemplate.setTimeToLive(timeToLive);
jmsTemplate.setPriority(priority);
jmsTemplate.send(createQueue(encoding));
在此先感谢您的帮助!
是;它会引起问题; Spring 集成使用 DynamicJmsTemplate
正是出于这个原因(在 ThreadLocal
中存储属性)。
它不支持您需要的所有属性,但您可以将其用作模型。