Camel ProducerTemplate对所有消息使用相同的JMSCorrelationID,如何为每条消息生成唯一ID?

时间:2017-11-06 21:20:22

标签: apache-camel jmstemplate

我使用camel定义了生产者模板

<camel:template id="msgProducerTemplate" />

我正在将此bean注入我的一个服务中以生成消息。

msgProducerTemplate.sendBodyAndHeaders(endpointUri, message, headerMap);

对于生成所有生成的correlationID的消息都是相同的,即使实际消息相同,如何为每条消息创建一个新的id。

我的endpointUri是inboundTopic:主题:$ {topic.name}

我的jmscomponent定义如下......

<bean id="inboundTopic" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="jmsTopicConnectionFactory" />
    <property name="destinationResolver" ref="topicDestinationResolver" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="topicTxManager" />
    <property name="cacheLevelName" value="CACHE_CONSUMER" />
</bean>

<bean id="topicConnectionFactory" class="com.ibm.mq.jms.MQTopicConnectionFactory">
    <property name="hostName" value="${queuehost}" />
    <property name="port" value="${queueport}" />
    <property name="queueManager" value="${queuemanager}" />
    <property name="channel" value="${channel}" />
    <property name="transportType" value="${transportType}" />
</bean>

<bean id="jmsTopicConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="topicConnectionFactory" />
    <property name="username">
        <value>${userid}</value>
    </property>
</bean>

<bean id="topicDestinationResolver" class="com.abc.jms.JMSTopicDestinationResolver" />

1 个答案:

答案 0 :(得分:0)

只需添加JMSCorrelationID标题。

例如

headerMap.put("JMSCorrelationID", UUID.randomUUID().toString());