Replacing WMQ with MSMQ
Currently we are using WMQ for message queing along with the BizTalk MQSeries adapter to accept the messages from WMQ, my question is how feasible it is to replace WMQ with MSMQ and what are the pros and cons of the same. Please share your experince and ideas on the same. Thanks.
Howard
Answers
- Hi,You can read/write the messages in the remote machine MSMQ queue (Server A) using BizTalk MSMQ adapter (You have to install MSMQ adapter). The only consideration is that your the user used for BizTalk MSMQ adapter should have appropriate rights for the server A MSMQ.We are processing MSMQ messages from remote machine using BizTalk without any issue.
Regards,Tariq Majeed
Please mark it as answer if it helps- Proposed As Answer byAndrew_ZhuMSFT, ModeratorMonday, November 02, 2009 7:23 AM
- Marked As Answer byAndrew_ZhuMSFT, ModeratorTuesday, November 03, 2009 2:49 AM
- Hi,Please see the extract from link http://msdn.microsoft.com/en-us/library/ms789048.aspx below:"In MSMQ, queues can be transactional or non-transactional. A transactional queue allows messages to be captured and delivered in a transaction and then stored durably in the queue. Messages sent to a transactional queue are transferred exactly once in order. You can use a non-transactional queue to send both volatile and durable messages. A message sent to a non-transactional queue does not carry any reliable transfer assurances; thus, messages can be lost."Regards,Tariq Majeed
Please mark it as answer if it helps- Marked As Answer byAndrew_ZhuMSFT, ModeratorTuesday, November 03, 2009 2:49 AM
All Replies
- I guess one major diff would be WMQ is costly and MSMQ comes free with Win 2003 but then works only on Win platfrom...
Please do reply. Thanks - GUYS any reply is appreciated, please do reply back...
- donno if it is issue or not but i found some issues when I was reading messages from remote server( I dont exactly remember could be transactions issue) also MSMQ has/had size limit of 4MB.
KiranMP My requirement is the remote application sends some 15000 to 20000 messaages to be processed and as you said if this remote application happens to be done using microsoft technology then the remote application can directly add messages to MSMQ and then using the MSMQ adapter of BizTalk the messages can be picked up for further processing.
As you said MSMQ is used for In-Order delivery but at the same time it does not require the other application to be online that is if the messages coming are too much as mentioned above then they can very well sit in the qeue and wait for it to be picked by the MSMQ adapter, so I guess my driver along with the ordered delivery messages it is also the number of messages coming and processing the same.
So, I was thinking of having MSMQ, so that the remote app can send the message to the MSMQ and the Biztalk would pickup the messages using the MSMQ adapter for further processing. Please share your thoughts ...
- Hi,Your solution with MSMQ should work.If you set the order delivery to true, , the adapter operates on a single thread. This limits the adapter to one message at a time and conserves memory. Notice that this effectively sets batch size to one (1), regardless of the value assigned to it in the property sheet (http://msdn.microsoft.com/en-us/library/aa562010(BTS.10).aspx).Regards,Tariq Majeed
Please mark it as answer if it helps - Is there any good documentation of using MSMQ with BizTalk and important things we need to consider while implementing the same, please do let me know about such articles/blogs ...
- Here is one blog:
http://blogs.msdn.com/eldarm/archive/2005/09/27/474540.aspx
Regards,
Abhijit
Abhijit Mahato Please "Mark as Answer" if Post has Answered the Question Hi Abhijit,
Thanks, I was looking of a more detailed articles/blogs of how to use MSMQ with BizTalk basically the below points:
How it should be installed, whether the MSMQ and BizTalk should be on the same box or MSMQ can be on a diff boxHow is the MSMQ Adpater hooked to the MSMQ queue and receives or send the messages to MSMQ queue, basciall if biztalk and MSMQ are on diff boxes how does it work
What would be the ideal setup for using MSMQ with BizTalk
Please share your thoughts on the same. Thanks.
- It might help you........
http://blogs.msdn.com/eldarm/archive/2005/10/24/migration-considerations-for-moving-from-msmq-t-to-msmq-adapter-in-biztalk-2006.aspx
Specially the sections:
- High availability (non-transactional): Use MSMQ behind NLB.
- High availability (transactional): Use BizTalk 2006 and NT cluster.
- Scalability (non-transactional): Use MSMQ behind NLB.
- Scalability (transactional, in order): Manually distribute queues between receiving machines or wait until MSMQ remote read will be supported.
- Scalability (transactional, no order): Use BizTalk 2006, MSMQ behind NLB, and NT cluster.
Regards,
Abhijit
Abhijit Mahato Please "Mark as Answer" if Post has Answered the Question - Well to summarize, I would have the environment as below: Windows Server A: Will have a Application, which would send messages to the local MSMQ queue, which means the Application and the MSMQ is installed on the same Windows Server A. Windows Server B: Will have BizTalk Server 2006, which would receive/send messages to the remote MSMQ queue which is on Server A, which I guess is the right approach but this means that Server B would also have MSMQ installed on it along with the BizTalk Server 2006 . Please confirm if my undertstanding above is right ...
- Hi,You can read/write the messages in the remote machine MSMQ queue (Server A) using BizTalk MSMQ adapter (You have to install MSMQ adapter). The only consideration is that your the user used for BizTalk MSMQ adapter should have appropriate rights for the server A MSMQ.We are processing MSMQ messages from remote machine using BizTalk without any issue.
Regards,Tariq Majeed
Please mark it as answer if it helps- Proposed As Answer byAndrew_ZhuMSFT, ModeratorMonday, November 02, 2009 7:23 AM
- Marked As Answer byAndrew_ZhuMSFT, ModeratorTuesday, November 03, 2009 2:49 AM
Thanks Tariq ...
That means on, please confirm if my below understanding is right ...
Windows Sevrer A: I would have the Application and the MSMQ installed and on
Windows Server B: I would have BizTalk Server 2006 installed which also has the MSMQ adapter installed along with it
Also, by having the above environment how can I have the NLB and Clustering in the production environment for high availability and scalibility .... please share your thoughs on the same- Hi,
Yes your understanding is correct. When you will configure your queue receive location, you will set the Queue in adpater setting something like as FORMATNAME:DIRECT=OS:ComputerName\PRIVATE$\QueueName, give user name and password for user who has access right to the server A queue.
If you are talking about BizTalk host instance clustering (supported in BizTalk 2006 R2 and BizTalk 2009), then yes.
If ordering is not an issue, then you can use regular setting of multiple server BizTalk environment.
Regards,
Tariq Majeed
Please mark it as answer if it helps Tariq thanks ...
So, ideally the MSMQ receive/send adpater is able to read as well as write messages to the remote Queue on Server A, I am talking about BTS 2006 and there is no need for any intermediate Web Service to read/write the messages and the MSMQ adapter can do the same ...Also, for writing the messages to MSMQ server the Application on Server A would write the messages to MSMQ using MSMQ API's available ....
Please do confirm the above 2 points . Thanks.- Hi,Yes both points you mentioned are correct.We have a similar scenario in in our production environment where a web service on server A is writing the messages to the local queue usong MSMQ API and Biztalk on sever B is reading and getting these messages using MSMQ receive port(location). The user used in configuring the MSMQ receive location has the rights to server A queue. This should work for you.
Regards,Tariq Majeed
Please mark it as answer if it helps - Tariq thanks again ...
Looks like the MSMQ does not support remote transactional read, how will it work if the MSMQ adpater on Server B is reading from the remote queue which is on Server A, if transactions are not supported.
I mean keeping the existing architecture in mind (i.e. Server A and Server B) how does message queuing work and how we can implement transactions on the same ...
Please do let me know. - Hi,
In our scenario, we do not need transactional reads. The transactional read is only avaialable in MSMQ 4.0. Please check the article http://msdn.microsoft.com/en-us/library/ms700128(VS.85).aspx. I have just read the article, never tried this.
May be you install MSMQ on server B, create queue there too. Write a dispatcher application on server A that copies the queue messages from Server A to server B using MSMQ API. Then you use BizTalk on server B to do the transactional reads locally.
Regards,
Tariq Majeed
Please mark it as answer if it helps - I guess for reliable delivery of messages we do need transactional read right and which is possible only with the local queues, I was just trying to figure out if we really need a transactional read for reliable delivery, given my scenario so far ???
- Hi,Please see the extract from link http://msdn.microsoft.com/en-us/library/ms789048.aspx below:"In MSMQ, queues can be transactional or non-transactional. A transactional queue allows messages to be captured and delivered in a transaction and then stored durably in the queue. Messages sent to a transactional queue are transferred exactly once in order. You can use a non-transactional queue to send both volatile and durable messages. A message sent to a non-transactional queue does not carry any reliable transfer assurances; thus, messages can be lost."Regards,Tariq Majeed
Please mark it as answer if it helps- Marked As Answer byAndrew_ZhuMSFT, ModeratorTuesday, November 03, 2009 2:49 AM
- I was reading the MSMQ best practices where it says "MSMQ is designed optimally for sending remotely and receiving locally", that means If I have environment as below:
Windows Server A: Has the Remote Application running on it .
Windows Server B: Has MSMQ and BizTalk Server 2006 installed on it, where in the BizTalk's MSMQ adapter can do transactional read using the local Queue.
But then I would probably need to have a Web Service which would write messages to the MSMQ queue remotely on Windows Server B, but then I am not sure will it cater to the reliable messaging mechanism as I am adding one more layer on top of MSMQ.... I am bit confused here now whether I should use transactional reads or not
Please share your thoughts on the same ... - Hi All,
Please do reply .... Also,
If I have the below environment setup, do I need to install MSMQ even on Win Server B which is suppose to do a remote read/write from Win Server A using BizTalk MSMQ adapter.
Windows Sevrer A: I would have the Application and the MSMQ installed and on
Windows Server B: I would have BizTalk Server 2006 installed which also has the MSMQ adapter installed along with it
Awaiting your reply. Thanks. - Hi,
You do not need the web service to send messages to Server B. Create a windows service on Server A that reads queue messages from Server A queue and write it to Server B queue using MSMQ API. Do the exception handling there, like if failed to copy, write message back to server A queue and send alerts or whatever exception handling you want to do.
Server B, do transactional reads on local queue using BizTalk MSMQ adapter.
Regards,
Tariq Majeed
Please mark it as answer if it helps hmmm if MSMQ is installed on Server A and I want to do a remote read using BTS MSMQ adapter on Sever B, I hope I don't need to install MSMQ on server B as well ...
- Hi,
Yes I think only BTS MSMQ adapter is enough on Server B in this scenario.
Regards,
Tariq Majeed
Please mark it as answer if it helps

