Apache camel Camel ProducerTemplate对所有消息使用相同的JMSCorrelationID,如何为生成的每个消息获取唯一的id?

Apache camel Camel ProducerTemplate对所有消息使用相同的JMSCorrelationID,如何为生成的每个消息获取唯一的id?,apache-camel,jmstemplate,Apache Camel,Jmstemplate,我使用camel定义了生产者模板 我将这个bean注入到我的一个服务中以生成消息 msgProducerTemplate.sendBodyAndHeadersendpointUri,消息,headerMap 对于生成的所有消息,生成的correlationID都是相同的,如何使其为每条消息创建一个新id,即使实际消息是相同的 我的endpointUri是inboundTopic:topic:${topic.name} 我的JMS组件定义如下 <bean id="inboundTopic"

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

我将这个bean注入到我的一个服务中以生成消息

msgProducerTemplate.sendBodyAndHeadersendpointUri,消息,headerMap

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

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

我的JMS组件定义如下

<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" />
只需添加JMSCorrelationID头

例如


我知道这将解决问题,但我为什么要这样做?您没有提到您正在使用的组件。ExchangePattern和其他端点选项也是相关的,因此这是目前我能提供的唯一答案。为了能够回答,请提供完整的endpointUri、headerMap的内容和使用的camel版本。这取决于您如何配置JMS组件和发送到的JMS端点等。您需要提供更多详细信息,还要阅读更多关于JMS组件以及请求/应答如何工作的信息。@ClausIbsen更新了问题。您确定在传递给生产者模板的标题中没有提供现有的JMSCorrelationID吗。例如,您可以调试和/或启用调试/跟踪日志记录,并查看发生了什么。是的,我确信我没有设置correlationID。我确实尝试过设置JMSCOrrationId,在这一点上它工作得很好。它可能是您正在使用的JMS代理。当您使用InOnly messaging not request/reply时,Camel不会自动设置任何JMSCOrrationId。CorrelationID仅在使用InOut请求/应答时使用。您正在使用的JMS客户机可能会执行某些操作,例如IBM MQ。
headerMap.put("JMSCorrelationID", UUID.randomUUID().toString());