This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 9908659 CAMEL-16861: Cleanup and update EIP docs 9908659 is described below commit 9908659cd9edcf7ff6b5be1642313313f2afee55 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Oct 12 09:47:24 2021 +0200 CAMEL-16861: Cleanup and update EIP docs --- .../docs/modules/eips/pages/event-message.adoc | 33 ++++-- .../docs/modules/eips/pages/requestReply-eip.adoc | 118 +++++++++++++++++---- 2 files changed, 120 insertions(+), 31 deletions(-) diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/event-message.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/event-message.adoc index 2d69fa0..81218a5 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/event-message.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/event-message.adoc @@ -1,18 +1,26 @@ = Event Message Camel supports the -http://www.enterpriseintegrationpatterns.com/EventMessage.html[Event -Message] from the xref:enterprise-integration-patterns.adoc[EIP -patterns] by supporting the xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] -on a xref:message.adoc[Message] which can be set to *InOnly* to indicate -a oneway event message. Camel xref:components::index.adoc[Components] then -implement this pattern using the underlying transport or protocols. +http://www.enterpriseintegrationpatterns.com/EventMessage.html[Event Message] +from the xref:enterprise-integration-patterns.adoc[EIP patterns]. + +How can messaging be used to transmit events from one application to another? image::eip/EventMessageSolution.gif[image] -The default behaviour of many xref:components::index.adoc[Components] is InOnly +Use an Event Message for reliable, asynchronous event notification between applications. + +Camel supports Event Message by the xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] +on a xref:message.adoc[Message] which can be set to `InOnly` to indicate +a oneway event message. Camel xref:components::index.adoc[Components] then +implement this pattern using the underlying transport or protocols. + +The default behaviour of many xref:components::index.adoc[Components] is `InOnly` such as for xref:components::jms-component.adoc[JMS], xref:components::jms-component.adoc[File] or -xref:components::seda-component.adoc[SEDA] +xref:components::seda-component.adoc[SEDA]. + +Some components support both `InOnly` and `InOut` and act accordingly. For example the xref:components::jms-component.adoc[JMS] +can send messages as one-way (`InOnly`) or use request/reply messaging (`InOut`). TIP: See the related xref:requestReply-eip.adoc[Request Reply] message. @@ -90,3 +98,12 @@ NOTE: Using `setExchangePattern` to change the xref:latest@manual:ROOT:exchange- 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 xref:components::jms-component.adoc[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 xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] +on the xref:latest@manual:ROOT:exchange.adoc[Exchange] to know whether to use `InOnly` or `InOut` mode (i.e. one-way vs request/reply messaging) + diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc index c9f8ad5..4e0646e 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc @@ -1,42 +1,114 @@ = Request Reply Camel supports the -http://www.enterpriseintegrationpatterns.com/RequestReply.html[Request -Reply] from the EIP patterns -by supporting the Exchange Pattern on a -Message which can be set to *InOut* to indicate a -request/reply. Camel Components then implement -this pattern using the underlying transport or protocols. +http://www.enterpriseintegrationpatterns.com/RequestReply.html[Request Reply] +from the xref:enterprise-integration-patterns.adoc[EIP patterns]. + +When an application sends a message, how can it get a response from the receiver? image::eip/RequestReply.gif[image] -For example when using xref:components::jms-component.adoc[JMS] with InOut the component will -by default perform these actions +Send a pair of Request-Reply messages, each on its own channel. + +Camel supports Request Reply by the xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] +on a xref:message.adoc[Message] which can be set to `InOut` to indicate a +request/reply message. Camel xref:components::index.adoc[Components] then +implement this pattern using the underlying transport or protocols. + +For example when using xref:components::jms-component.adoc[JMS] with `InOut` the component will +by default perform these actions: * create by default a temporary inbound queue -* set the JMSReplyTo destination on the request message -* set the JMSCorrelationID on the request message +* set the `JMSReplyTo` destination on the request message +* set the `JMSCorrelationID` on the request message * send the request message -* consume the response and associate the inbound message to the request -using the JMSCorrelationID (as you may be performing many concurrent -request/responses). +* consume the response and associate the inbound message to the belonging request +using the `JMSCorrelationID` (as you may be performing many concurrent request/responses). +* continue routing when the reply is received and populated on the xref:latest@manual:ROOT:exchange.adoc[Exchange] TIP: See the related xref:eips:event-message.adoc[Event Message]. -[[RequestReply-ExplicitlyspecifyingInOut]] -== Explicitly specifying InOut +== Using endpoint URI + +If you are using a component which defaults to `InOnly` you can override +the xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] for a *consumer* endpoint using +the pattern property. -When consuming messages from xref:components::jms-component.adoc[JMS] a Request-Reply is -indicated by the presence of the *JMSReplyTo* header. +[source,text] +---- +foo:bar?exchangePattern=InOut +---- -You can explicitly force an endpoint to be in Request Reply mode by -setting the exchange pattern on the URI. e.g. +IMPORTANT: This is only possible on endpoints used by consumers (i.e. in `<from>`). -[source] +In the example below the message will be forced as a request reply message as the consumer +is in `InOut` mode. + +[source,java] +---- +from("jms:someQueue?exchangePattern=InOut") + .to("bean:processMessage"); ---- -jms:MyQueue?exchangePattern=InOut + +And with XML: + +[source,xml] +---- +<route> + <from uri="jms:someQueue?exchangePattern=InOut"/> + <to uri="bean:processMessage"/> +</route> +---- + +== Using setExchangePattern EIP + +You can specify the +xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] using `setExchangePattern` in the DSL. + +[source,java] ---- +from("direct:foo") + .setExchangePattern(ExchangePattern.InOut) + .to("jms:queue:cheese"); +---- + +And with XML: + +[source,xml] +---- +<route> + <from uri="direct:foo"/> + <setExchangePattern pattern="InOut"/> + <to uri="jms:queue:cheese"/> +</route> +---- + +When using `setExchangePattern` then the xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] +on the xref:latest@manual:ROOT:exchange.adoc[Exchange] is changed from this point onwards in the route. + +This means you can change the pattern back again at a later point: + +[source,java] +---- +from("direct:foo") + .setExchangePattern(ExchangePattern.InOnly) + .to("jms:queue:one-way"); + .setExchangePattern(ExchangePattern.InOut) + .to("jms:queue:in-and-out") + .log("InOut MEP received ${body}") +---- + +NOTE: Using `setExchangePattern` to change the xref:latest@manual:ROOT:exchange-pattern.adoc[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 xref:components::jms-component.adoc[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 xref:latest@manual:ROOT:exchange-pattern.adoc[Exchange Pattern] +on the xref:latest@manual:ROOT:exchange.adoc[Exchange] to know whether to use `InOnly` or `InOut` mode (i.e. one-way vs request/reply messaging) -You can specify the exchange pattern in DSL rule or Spring -configuration.