私のユースケース(キャメル):
着信メッセージにcorrelationId(clientCorrIdなど)がある場合=>そのままにしておきます。 clientCorrIdはクライアントが応答をマップするために使用されるため、何もしません。
着信メッセージに correlationId がない場合 => messageId を取得し、correlationId に入れます (「jms」コンポーネントを使用するすべてのルートではなく、ルート レベルで)
correlationId のコピーは、ルート レベルでのみ行う必要があります
ルート レベルで corrleationId のコピーを行う方法は? (以下のように useMessageIDAsCorrelationID のようにグローバルではありません)
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<!--property name="useMessageIDAsCorrelationID" value="true" / WARNING! Do not use this as we need to copy only in the beginning not everywhere -->
<property name="transactionManager" ref="jpaTransactionManager" />
<property name="transacted" value="true" />
</bean>
このような別の Bean コードを使用して、空の場合にのみcorrelationId をコピーすることは避けたいです。
if (EMPTY_MSG_ID.equals(currentCorrId)) {
log.info("No corrId set, setting msgId to corrid :" + msgId);
outHeader.put(correlationIdKey, msgId);
} else {
outHeader.put(correlationIdKey, currentCorrId);
log.info("CorrId already set: " + currentCorrId);
}