Extends the BizTalk ESB Toolkit 2.0 with a number of generic services such as ReceivePipelineService, SendPipelineService, and ResequencerService. Uses a somewhat different resolution framework to enable better resolution: resolving serializable objects
rather than just strings.
More detailed information can be found on my blog about the ESB.Extensions:
The ESB.Extensions solution contains a number of services, that were implemented on top of the ESB Toolkit 2.0. The ESB.Extensions uses a slightly different resolution framework, which allows for resolution of fully-fledged serializable objects rather than
just strings. (To allow for resolution of only strings was just too limited and not enough generic to my taste). The ESB.Extensions resolution framework is still compatible with the ESB configuration and itinerary designer.
The following Services (orchestrations) have been included up to now:
- ReceivePipelineService: Can be used to execute a receive pipeline from within the orchestration. One obvious application for this service is (post-receive) debatching using the XmlReceive pipeline (or any custom pipeline that includes the XmlDisassembler
or FFDisassembler). This service can be configured using the ESB.Extensions resolution framework with the following parameters:
- SendPipelineService: Can be used to execute a send pipeline from within the orchestration. One application for this service is aggregation using pipelines, that contain the XmlAssembler or FFAssembler components. This service, too, can be configured using
the ESB.Extensions resolution framework with the following parameters:
- Send pipeline type
- Batch Timeout: The timeout to apply to the entire batch. When this timeout expires, all the collected messages up to that point in time will be aggregated and the service completes.
- Message Timeout: The timeout to apply to each message. When this timeout expires, all the collected messages up to that point in time will be aggregated and the service completes.
- XLANGMessageComparer type: The SendPipelineService uses a serializable list to collect the messages to be aggregated. You can specify the comparer type to control how the messages are sorted. This happens in memory, but does not add much overhead compared
to the use of Microsoft.XLANGs.Pipeline.SendPipelineInputMessages.
- Resequencer and ResequencerGo services: These two services can be used in conjunction to resequence a given sequence (or batch) of messages.
The EsbBatchDb can be used to track batches, so that batches can be dynamically combined or otherwise defined based upon the resolver implementations. The ESB.Extensions has an orchestration HandleBatchCompleteNotification, which works together with the WCF-SQL
adapter to handle notifications, sent by Sql Server. Those notifications are used to generate Go messages, which in turn will be used by the Resequencer(Go) orchestrations to start resequencing the batches.
A number of issues are still open, if anyone's interested to take on any number of them:
- Fix the Itineraries in the designer. They are outdated compared to the exported itineraries in xml, which were manually edited.
- Add a pipeline component that registers an incoming batch (in a database? EsbBatchDb?) and publishes a 1st Go message if that is necessary. The services should remain unaware of this database, but the resolvers (i.e. BRE) could use this database, for instance
to determine if a certain message is the last message in the batch. Could include creating BRE vocabularies.
- Add support for request-response.
- Add a DynamicItineraryService that will allow to adjust/override an itinerary.
- Support absolute DateTimes rather than TimeSpans for the Batch and Message Timeouts.
- Support xpath properties on XxxPipelineServiceResolution to support assigning of batch id and sequence id using xpaths (rather than the BatchId and SequenceId promoted properties, defined in ESB.Extensions,Schemas).
- Add per-instance pipeline configuration to the configuration settings for the pipeline services, and rewrite the xlangpipelinemanager to be able to accept the per-instance config.
The following scenarios should be supported:
1. Message debatching: See BizUnit testcase T00100.
2. Debatching and Aggregation, including Message and Batch timeouts: See BizUnit testcase T00200 - T00240.
3. Debatching, Resequencing and Aggregation: See BizUnit testcase T00300 - T00310.
4. Debatching, Resequencing and Aggregation whilst tracking batches using the EsbBatchDb: See BizUnit testcase T00350.
The ESB.Extensions was facilitated by Sela Technology Center