高并发应用程序的 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 中存储属性)。

它不支持您需要的所有属性,但您可以将其用作模型。

Here's the code and here is how it is used.