none
Transactional MSMQ 4.0 with multiple receive instances RRS feed

  • Question

  • Hi all,

    I'm curious about having multiple receive host instances for an MSMQ adapter on a non clustered, non NLB BizTalk setup, but with multiple boxes running multiple hosts.  It will be MSMQ 4.0 allowing remote transactional reads and the queue messages are to be transactional.  All the doco I see says that the receive hosts need to be clustered because having two receive instances to the one queue "can cause problems".  This seems to be mainly old documentation.

    My question is, is this still a problem with MSMQ 4.0 and transactional messages?  It seems logical that if the reads are transactional then there shouldn't be a problem with two receive instances reading from the one queue.  Basically I am trying to avoid setting up a clustered host instance to read from this queue if I can, but I want more than one receive instance for availability (using BizTalks inbuilt load balancing).

    Thanks

    Monday, June 21, 2010 11:06 PM

All replies

  • Hi,

    According to MSDN this is still the case, see Considerations for Running Adapter Handlers within a Clustered Host (updated info). Excerpt from this link:

    To ensure high availability for the MSMQ adapter and to ensure transactional consistency for messages sent or received by the MSMQ adapter, you should do the following:

    1. Configure Message Queuing (MSMQ) as a clustered resource in a Windows Server cluster group on your BizTalk Server computers.
    2. Add the clustered MSMQ service to the list of Resource dependencies for the clustered BizTalk host. This will ensure that the clustered BizTalk host will always start after the clustered MSMQ service in failover scenarios.
    3. Configure the MSMQ adapter send and receive handlers in a BizTalk host instance that has been configured as a cluster resource in the same cluster group as the clustered MSMQ resource.

    These steps are recommended for the following reasons:

    MSMQ adapter receive handler – MSMQ versions prior to MSMQ 4.0 do not support remote transactional reads, only local transactional reads are supported. In this case, the MSMQ adapter receive handler must run in a host instance that is local to the clustered Message Queuing service in order to complete local transactional reads with the MSMQ adapter.

    HTH

    Regards,

    Steef-Jan Wiggers
    MCTS BizTalk Server
    http://soa-thoughts.blogspot.com/
    If this answers your question please mark it accordingly

     


    BizTalk
    Tuesday, June 22, 2010 4:35 PM
    Moderator
  • Thanks,

    Yeah I saw that, the "MSMQ versions prior to MSMQ 4.0" is what makes that sentence ambiguous.  It makes it sound like you need the hosts clustered, because your MSMQ will also be clustered, and because you can't do remote transactional reads you need the host installed on each queue node.

    The remote transaction thing now isn't a problem, the only other bit of info I saw was to do with the two receive hosts clashing with each other (like the FTP ones would), but I would assume being transactional would solve this.  I'll set up a POC, but for something like this it may not show up till a heavy load and we kinda need to know in advance

     

    Cheers

    Wednesday, June 23, 2010 2:10 AM
  • Based on this other article, http://msdn.microsoft.com/en-us/library/ms700128(v=VS.85).aspx, the DTC enables the transactional receive to work across more than one box as a "native function" of Vista and later or W2K8 R1 and later.

    Another related question is whether relying on MSMQ 4 fulfills the high availability requirements and I would say probably not. So the cluster capability is no longer required for remote transactional reads but you might still want it for high availability.

    I agree that the article could be clearer. The originally mentioned article should be updated soon because most users are at least on Vista now. If MSMQ 3 support ends with W2K3 R1 then this is pretty soon.

    Thanks,


    If this answers your question, please use the "Answer" button to say so | Ben Cline
    Thursday, June 24, 2010 6:56 PM
    Moderator
  • Thanks, yeah we're already using the remote transactional reads, and the queues are to be clustered I'm mostly curious about whether having two BizTalk hosts with an MSMQ receive on two seperate boxes receiving from the same clustered queue will interfere with each other or not.  It's weird I saw a mention that it might be problematic (again like the FTP or POP ones) but not why, or if it's still a problem when using transactional queues.
    Thursday, June 24, 2010 11:01 PM
  • So after running a bunch of tests it seems that two transactional netMSMQ WCF Receive pointing to the same queue won't work, even when transational, which seems odd to me but there we have it.

     

    Cheers all

    Thursday, July 8, 2010 2:59 AM