Question

I have a BizTalk receive port connected to a queue (using MQ Series adapter) which is used to receive ordered messages. I need to scale out this port with multiple BizTalk host instances (I'm using BizTalk Server 2006 R2).

According to MSDN this cannot be done since ordered message delivery works against scale-out techniques.

Is there any other way to achieve ordered message delivery with scaling out with multiple BizTalk host instances? Is it possible to achieve this with sequential convoy pattern?

Appreciate your feedback.

Thanks,

Chatur

No correct solution

OTHER TIPS

This won't work - scaling out isn't going to help you if you need to process messages in sequence. How can you process the next item in the queue from another host instance if the current host instance hasn't completed. You are basically asking how can I make my sequential delivery parallelizable?

As per answers to your post on MSDN, turning on 'Ordered' your MQ Receive Location will prevent parallel throughput from multiple receive hosts, but you should still receive the benefits of reliability, failover and 'maintenance' slots without downtime.

FWIW, we are using the MQSC adapter on 2 servers - there are many performance 'knobs' (polling interval, maximum batch size, and ?threads) on the receive location (admittedly, we aren't using ordered) which can be used to improve ordered throughput from just the one listener (exactly how many messages do you need to process per second?).

As an alternative to ordered delivery across the receive location (and assuming the documents needed for a unit of work have been split and can be correlated back together / and documents have some kind of sequence number), you might look at aggregation patterns on a per-message basis such as this one from Seroter

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top