Share via


MSMQ vs. MSMQT

What is MSMQT?

The simplest way to explain MSMQT, would be to say that it's an MSMQ emulator for BizTalk.  MSMQT was introduced with BizTalk Server 2004, although there is also a regular MSMQ Adapter available, enabling BizTalk to use regular "full-blown" MSMQ.

Why MSMQT?

As you probably know, regular MSMQ keeps data in its storage directory, using it's own storage format.  MSMQT stores data directly in the BizTalk MessageBox, eliminating the need for an MSMQ store.  Here are a few of the advantages from using MSMQT:

  • No hard storage limit on Windows 2000 as the data is stored directly in the BizTalk MessageBox
  • Data is stored centrally in BTS, so you don't need to worry about backing/maintaining two separate data stores.
  • Multiple instances of the MSMQT Service share the same database (or data store in this case)

However, there are some disadvantages to MSMQT as well, these include:

  • Poor performance, MSMQT is single threaded. In high volume scenarios, this could cause messages to be processed quite slowly.
  • Not all MSMQ features are implemented in MSMQT (remember that MSMQT emulates MSMQ, so it's not identical).  In particular most of the MSMQ v3.0 features (such as MSMQ over HTTP) are not available
  • No published APIs for programtic use
  • MSMQT is only used by BizTalk.  MSMQ on a BizTalk computer could also be shared with other applications.

Fault Tolerance

On BizTalk 2004, the recommended way to achieve fault-tolerace was to arrange BizTalk hosts in an NLB type of arrangement.  Those of you familiar with MSMQ will know that sending transactional MSMQ messages across an NLB is typically not supported.  MSMQT provided a way to use BizTalk along with transactional MSMQ messages and still have fault tolerance.  Since all of the data is kept in the MessageBox, acks can be correctly issued so long as all of the receiving endpoints are part of the same BizTalk group.

Regular MSMQ typically achieves fault-tolerance through a cluster, and this configuration wasn't introduced in BizTalk until the 2006 version was released.  If you require transactional messages along with fault-tolerance on BizTalk 2004, then MSMQT might be the right choice for you.  Otherwise, Clustering BizTalk 2006 along with clustering MSMQ will most likely provide better performance.

Issuing Acks

Since MSMQT only emulates MSMQ, it's worth noting that the acknowledgement messages are not issued at exactly the same times as they're issued with MSMQ.  MSMQ will issue an acknowledgement message (ack) for transactional messaging when the messages arrives at the destination queue on the receiver.  MSMQT behaves slightly differently, and only issues the ack after the message has been picked up by a subscriber (so if you don't have a valid subscriber active to pick up the message, no ack gets issued).

Running both MSMQ and MSMQT?

I should probalby point out that since MSMQT pretty much copies everything that MSMQ does, it also listens on the same ports.  It's easy to install one or the other, but if you'd like to have both running side-by-side, you can do that too.  Take a look at the following article for more information:

895867 How to install the BizTalk Adapter for MSMQ in BizTalk Server 2004 when MSMQT is installed or when the MSMQC Adapter sample is installed
https://support.microsoft.com/default.aspx?scid=kb;EN-US;895867

Summary

If you require fault-tolerance and transactional messaging, and have a compelling reason to stay on BizTalk 2004, then MSMQT may be the right choice.  Otherwise in most other cases, clustering BizTalk 2006 along with clustering MSMQ would provide a better overall solution.