Event Message
Camel supports the Event Message from the EIP patterns.
How can messaging be used to transmit events from one application to another?

Use an Event Message for reliable, asynchronous event notification between applications.
Camel supports Event Message by 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.
The default behaviour of many Components
is InOnly
such as for JMS, File or
SEDA.
Some components support both InOnly
and InOut
and act accordingly.
For example, the JMS
can send messages as one-way
(InOnly
) or use request/reply
messaging (InOut
).
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.
- Java
-
from("mq:someQueue?exchangePattern=InOnly") .to("activemq:queue:one-way");
- 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.
- Java
-
from("mq:someQueue") .setExchangePattern(ExchangePattern.InOnly) .to("activemq:queue:one-way");
- 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.)
|
JMS component and InOnly vs. InOut
When consuming messages from JMS a Request Reply is
indicated by the presence of the JMSReplyTo
header. This means the JMS component automatic
detects whether to use InOnly
or
InOut
in the consumer.
Likewise, the JMS producer will check the current
Exchange Pattern
on the Exchange to know
whether to use InOnly
or InOut
mode (i.e., one-way vs. request/reply messaging)
Other Implementation Details
There are concrete classes that implement the
Message
interface for each
Camel-supported communications technology. For
example, the JmsMessage
class
provides a JMS-specific implementation of the
Message
interface. The public API
of the Message
interface provides
getters and setters methods to access the message
id, body and individual header
fields of a message.