Many users are familiar with utilizing Neuron for Location Transparency and Services Mediation as well as standard EAI. And, a fair number of users are familiar with using Neuron's pipeline features such as WF or Notifications or Transformation.
Very few users however are aware that you can achieve patterns with Neuron that seem to require a classic orchestration engine. I was asked recently about one of those patterns Scatter-Gather and provided a solution that was targeted to that particular use case.
I realized that this solution was not immediately intuitive because Neuron is a more obvious Messaging Engine today than it is an EIP engine and decided that I would build a more generalized example so that more folks would understand how to do such things.
I've uploaded the code so that you can work with it yourselves but the basic pattern works like this. The Party in the Client Connector contains a WF which splits the incoming request and uses a proxy for the original Party to run pipelines which use CBR to determine message paths and action and then publishes the requests to the bus with Semantic.Request.
Did you catch that? When you read the code and the ESB you'll see it's simpler than that Faulkneresque sentence.
The replies are then gathered and returned to the bus with a Semantic.Reply.
So, essentially it's a Party in a Client Connector using a WF to talk to the bus and itself!
In the land of tomorrow... which is coming very soon some EIPs will be baked into our new services engine and you will be able to compose solutions graphically. In addition, our fearless leader Marty Wasznicky has targeted persisted WF for the 3rd qtr. So many classic orchestrations and long running process scenarios will be available within the year.
We're not losing our roots though. Neuron was built with messaging in mind and the mad scientist Mr. Jesse Ezell has been hitting some numbers that will make fans of speed stand up...
Anyways, before I get too excited back to today....Please run the scenario by first unpacking the Zip and loading the aggregotor.esb in offline mode. Make sure you fix up the path to the WF in the integration tab if it differs. Fix the references to link to your ESB, compile and hit CTRL-F5 to start the example services. Finally switch your active .esb to point to aggregator.esb and you should be ready to go to test view in VS and choose RunExample.
This is a somewhat advanced scenario so feel free to ask questions...There's actually code in there to do aggregation in the WF with our Client Connectors instead of the .NET API and you can also add multicasting with one line but I’ll leave those as the dreaded exercise for the reader!
The code is here: AggregationViaWFExample.zip