Event Message

Camel supports the Event Message from the EIP patterns by supporting the Exchange Pattern on a Message which can be set to InOnly to indicate a oneway event message. Camel Components then implement this pattern using the underlying transport or protocols.

image

The default behaviour of many Components is InOnly such as for JMS, File or SEDA

See the related Request Reply message.

Using endpoint URI

If you are using a component which defaults to InOut you can override the Exchange Pattern for a consumer endpoint using the pattern property.

foo:bar?exchangePattern=InOnly
This is only possible on endpoints used by consumers (i.e. in <from>).

In the example below the message will be forced as an event message as the consumer is in InOnly mode.

from("mq:someQueue?exchangePattern=InOnly")
  .to("activemq:queue:one-way");

And with XML:

<route>
    <from uri="mq:someQueue?exchangePattern=InOnly"/>
    <to uri="activemq:queue:one-way"/>
</route>

Using setExchangePattern EIP

You can specify the Exchange Pattern using setExchangePattern in the DSL.

from("mq:someQueue")
  .setExchangePattern(ExchangePattern.InOnly)
  .to("activemq:queue:one-way");

And with XML:

<route>
    <from uri="mq:someQueue"/>
    <setExchangePattern pattern="InOnly"/>
    <to uri="activemq:queue:one-way"/>
</route>

When using setExchangePattern then the Exchange Pattern on the Exchange is changed from this point onwards in the route.

This means you can change the pattern back again at a later point:

from("mq:someQueue")
  .setExchangePattern(ExchangePattern.InOnly)
  .to("activemq:queue:one-way");
  .setExchangePattern(ExchangePattern.InOut)
  .to("activemq:queue:in-and-out")
  .log("InOut MEP received ${body}")
Using setExchangePattern to change the Exchange Pattern is often only used in special use-cases where you must force to be using either InOnly or InOut mode when using components that support both modes (such as messaging components like ActiveMQ, JMS, RabbitMQ etc.)