Spring Integration - 设置动态队列名称

时间:2017-03-12 15:21:10

标签: spring-integration spring-jms

我根据作业实例ID创建动态队列。对于请求队列,我可以覆盖xml config&在xml配置的java代码中将队列名称设置为jmsTemplateRequest.setDefaultDestination(jobid),如下所述。  对于响应队列,我想要一个解决方案。因为我无法以编程方式为jms-template设置jms:inbound-channel-adapter属性。

<int-jms:outbound-channel-adapter channel="RequestsChannel" jms-template="jmsTemplateRequest"/>
<bean id="RequestQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="RequestsQueue" />
</bean>

<bean id="jmsTemplateRequest" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
    <property name="receiveTimeout" value="5000" />
    <property name="defaultDestination" ref="RequestQueue"/>

    <!-- OTHERWISE how can I modify queue name in below code in java by autowiring? -->
     <int-jms:message-driven-channel-adapter connection-factory="connectionFactory"
                                        channel="ReplyChannel"
                                        destination-name="ReplyQueue"/>

1 个答案:

答案 0 :(得分:0)

消息驱动的适配器不使用JmsTemplate

您必须使用java @Configuration构建适配器,而不是使用XML。

您需要两个@Bean s - 一个JmsMessageDrivenEndpoint和一个ChannelPublishingJmsMessageListener,它将在构造函数中传递到端点。

您也可以使用属性占位符或SpEL表达式......

destination-name="#{someBean.replyDestination}"

会在getReplyDestination()上致电someBean