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 dcb33f0 CAMEL-16861: Cleanup and update EIP docs dcb33f0 is described below commit dcb33f089d14793a897dd4b738821793410e9e82 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Oct 11 12:23:43 2021 +0200 CAMEL-16861: Cleanup and update EIP docs --- .../modules/eips/pages/point-to-point-channel.adoc | 2 + .../docs/modules/eips/pages/process-manager.adoc | 21 ++++--- .../eips/pages/publish-subscribe-channel.adoc | 69 +++++++++++----------- 3 files changed, 52 insertions(+), 40 deletions(-) diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/point-to-point-channel.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/point-to-point-channel.adoc index 2643815..92a9347 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/point-to-point-channel.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/point-to-point-channel.adoc @@ -21,6 +21,8 @@ The Point to Point Channel is supported in Camel by messaging based xref:compone There are also messaging based in the cloud from cloud providers such as Amazon, Google and Azure. +TIP: See also the related xref:publish-subscribe-channel.adoc[Publish Scribe Channel] EIP + == Example The following example demonstrates point to point messaging using diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/process-manager.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/process-manager.adoc index af6ceed..60a06d0 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/process-manager.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/process-manager.adoc @@ -4,12 +4,6 @@ Camel supports the https://www.enterpriseintegrationpatterns.com/patterns/messaging/ProcessManager.html[Process Manager] from the xref:enterprise-integration-patterns.adoc[EIP patterns] book. -The xref:routingSlip-eip.adoc[Routing Slip] demonstrates how a message can be routed through a dynamic series of processing steps. -The solution of the Routing Slip is based on two key assumptions: the sequence of processing steps has -to be determined up-front and the sequence is linear. In many cases, these assumptions may not be fulfilled. -For example, routing decisions might have to be made based on intermediate results. -Or, the processing steps may not be sequential, but multiple steps might be executed in parallel. - How do we route a message through multiple processing steps when the required steps may not be known at design-time and may not be sequential? @@ -18,7 +12,20 @@ image::eip/ProcessManager.gif[image] Use a central processing unit, a Process Manager, to maintain the state of the sequence and determine the next processing step based on intermediate results. -With Camel this pattern is implemented by using the xref:dynamicRouter-eip.adoc[Dynamic Router] pattern. +With Camel this pattern is implemented by using the xref:dynamicRouter-eip.adoc[Dynamic Router] EIP. Camel's implementation of the dynamic router maintains the state of the sequence, and allows to determine the next processing step based dynamically. +== Routing Slip vs Dynamic Router + +On the other hand the xref:routingSlip-eip.adoc[Routing Slip] EIP demonstrates how a message can be routed +through a dynamic series of processing steps. The solution of the Routing Slip is based on two key assumptions: + +- the sequence of processing steps has to be determined up-front +- and the sequence is linear. + +In many cases, these assumptions may not be fulfilled. +For example, routing decisions might have to be made based on intermediate results. +Or, the processing steps may not be sequential, but multiple steps might be executed in parallel. + + diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/publish-subscribe-channel.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/publish-subscribe-channel.adoc index 8e8c774..aeead0b 100644 --- a/core/camel-core-engine/src/main/docs/modules/eips/pages/publish-subscribe-channel.adoc +++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/publish-subscribe-channel.adoc @@ -1,53 +1,56 @@ = Publish Subscribe Channel Camel supports the -http://www.enterpriseintegrationpatterns.com/PublishSubscribeChannel.html[Publish -Subscribe Channel] from the -xref:enterprise-integration-patterns.adoc[EIP patterns] using for -example the following components: - -* xref:components::jms-component.adoc[JMS] for working with JMS Topics for high performance, -clustering and load balancing -* xref:components::xmpp-component.adoc[XMPP] when using rooms for group communication -* xref:components::seda-component.adoc[SEDA] for working with SEDA in the same -xref:latest@manual:ROOT:camelcontext.adoc[CamelContext] which can work in pub-sub, but -allowing multiple consumers. -* xref:components::vm-component.adoc[VM] as SEDA but for intra-JVM. +http://www.enterpriseintegrationpatterns.com/PublishSubscribeChannel.html[Publish Subscribe Channel] +from the xref:enterprise-integration-patterns.adoc[EIP patterns]. + +How can the sender broadcast an event to all interested receivers? image::eip/PublishSubscribeSolution.gif[image] -[[PublishSubscribeChannel-Samples]] -== Samples +Send the event on a Publish-Subscribe Channel, which delivers a copy of a particular event to each receiver. + +The Publish-Subscribe Channel is supported in Camel by messaging based xref:components::index.adoc[Components], such as: + +* xref:components::amqp-component.adoc[AMQP] for working with AMQP Queues +* xref:components::jms-component.adoc[ActiveMQ], or xref:components::jms-component.adoc[JMS] for working with JMS Queues +* xref:components::seda-component.adoc[SEDA] for internal Camel seda queue based messaging +* xref:components::spring-rabbitmq-component.adoc[Spring RabbitMQ] for working with AMQP Queues (RabbitMQ) + +There are also messaging based in the cloud from cloud providers such as Amazon, Google and Azure. + +TIP: See also the related xref:point-to-point-channel.adoc[Point to Point Channel] EIP -Another option is to explicitly list the publish-subscribe relationship -in your routing logic; this keeps the producer and consumer decoupled -but lets you control the fine grained routing configuration using the -xref:latest@manual:ROOT:dsl.adoc[DSL]. +== Example -In Java code: +The following example demonstrates publish sbuscriber messaging using +the xref:components::jms-component.adoc[JMS] component with JMS topics: [source,java] ---- -from("direct:a") - .multicast() - .to("direct:b") - .to("direct:c") - .to("direct:d") - .end() // end multicast +from("direct:start") + .to("jms:topic:cheese"); + +from("jms:topic:cheese") + .to("bean:foo"); + +from("jms:topic:cheese") + .to("bean:bar"); ---- And in XML: [source,xml] ---- -<camelContext xmlns="http://camel.apache.org/schema/spring"> +<routes> <route> - <from uri="direct:a"/> - <multicast> - <to uri="direct:b"/> - <to uri="direct:c"/> - <to uri="direct:d"/> - </multicast> + <from uri="direct:start"/> + <to uri="jms:queue:foo"/> </route> -</camelContext> + <route> + <from uri="jms:queue:foo"/> + <to uri="bean:foo"/> + </route> +</routes> ---- +