我根据作业实例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"/>
答案 0 :(得分:0)
消息驱动的适配器不使用JmsTemplate
。
您必须使用java @Configuration
构建适配器,而不是使用XML。
您需要两个@Bean
s - 一个JmsMessageDrivenEndpoint
和一个ChannelPublishingJmsMessageListener
,它将在构造函数中传递到端点。
您也可以使用属性占位符或SpEL表达式......
destination-name="#{someBean.replyDestination}"
会在getReplyDestination()
上致电someBean
。