My Usecase (in camel):
-
if incoming message has correlationId (say clientCorrId) => leave as such, do nothing, as clientCorrId is used by client to map response.
-
if incoming message do not have correlationId => take messageId and put it in correlationId (at route level, not in every route that uses “jms” component)
Copying correlationId should be done only at a route level
How to do corrleationId copying at route level? (not globally as in useMessageIDAsCorrelationID as below)
<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>
I want to avoid having a separate bean code like this to copy correlationId ONLYIF it is empty:
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);
}
You can use an interceptor to intercept from jms endpoints, and add the missing id if needed. See http://camel.apache.org/intercept