Ask a questionAsk a question
 

AnswerReplacing WMQ with MSMQ

  • Tuesday, October 27, 2009 10:11 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Has Code
    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

  • Thursday, October 29, 2009 11:32 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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
  • Tuesday, November 03, 2009 1:23 AMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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

All Replies

  • Tuesday, October 27, 2009 11:34 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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 
  • Tuesday, October 27, 2009 1:49 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    GUYS any reply is appreciated, please do reply back...
  • Tuesday, October 27, 2009 1:54 PMKiran mp Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Tuesday, October 27, 2009 2:29 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    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 ...

  • Wednesday, October 28, 2009 5:37 AMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Wednesday, October 28, 2009 9:53 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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 ...
  • Wednesday, October 28, 2009 10:14 AMAbhijit Mahato Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Thursday, October 29, 2009 8:41 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    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 box

    How 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.

     

  • Thursday, October 29, 2009 11:08 AMAbhijit Mahato Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
  • 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
  • Thursday, October 29, 2009 7:27 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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 ...
  • Thursday, October 29, 2009 11:32 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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
  • Friday, October 30, 2009 7:59 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    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

  • Friday, October 30, 2009 1:06 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Sunday, November 01, 2009 10:16 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    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.

  • Sunday, November 01, 2009 1:37 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Monday, November 02, 2009 1:49 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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. 
  • Monday, November 02, 2009 2:05 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Monday, November 02, 2009 2:27 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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 ???

  • Tuesday, November 03, 2009 1:23 AMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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
  • Tuesday, November 03, 2009 10:11 AMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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 ...
  • Thursday, November 05, 2009 12:53 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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.

  • Thursday, November 05, 2009 2:12 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Thursday, November 05, 2009 2:25 PMHoward Roarke Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    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 ...

  • Thursday, November 05, 2009 2:43 PMTariq Majeed Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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