JMSTemplate和设置高度并发应用程序的属性

时间:2018-06-04 16:03:15

标签: ibm-mq spring-jms

我有一个应用程序,每天处理数十万(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));

先谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

Yes; it will cause issues; Spring Integration uses a DynamicJmsTemplate for this exact reason (storing properties in ThreadLocals).

It doesn't support all the properties you need but you could use it as a model.

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