Blog Post

Containers
2 MIN READ

MSMQ and Windows Containers

ViniciusApolinario's avatar
Dec 14, 2020

Ever since we introduced Windows Containers in Windows Server 2016, we’ve seen customers do amazing things with it - either with new applications that leverage the latest and greatest of .Net Core and all other cloud technologies, but also with existing applications that were migrated to run on Windows Containers. MSMQ falls into this second scenario.

MSMQ was an extremely popular messaging queue manager launched in 1997 that became extremely popular in the 2000’s with enterprises using .Net and WCF applications. Today, as companies look to modernize existing applications with Windows Containers, many customers have been trying to run these MSMQ dependent applications on containers “as is” - which means no code changes or any adjustments to the application. However, MSMQ has different deployment options and not all are currently supported on Windows Containers.

In the past year, our team of developers have tested and validated some of the scenarios for MSMQ and we have made amazing progress on this. This blog post will focus on the scenarios that work today on Windows Containers and some details on these scenarios. In the future we’ll publish more information on how to properly set up and configure MSMQ for these scenarios using Windows Containers.

 

Supported Scenarios

MSMQ can be deployed on different modes to support different needs from customers. Between private and public queues, transactional or not, and anonymous or with authentication, MSMQ can fit different scenarios - but not all can be easily moved to Windows Containers. The table below lists the currently supported scenarios:

Scope

Transactional

Queue location

Authentication

Send and receive

Private

Yes

Same container (single container)

Anonymous

Yes

Private

Yes

Persistent volume

Anonymous

Yes

Private

Yes

Domain Controller

Anonymous

Yes

Private

Yes

Single host (two containers)

Anonymous

Yes

Public

No

Two hosts

Anonymous

Yes

Public

Yes

Two hosts

Anonymous

Yes

 

The scenarios above have been tested and validated by our internal teams. In fact, here are some other important information on the results of these tests:

  • Isolation mode: All tests worked fine with both isolation modes for Windows containers, process and hyper-v isolation.
  • Minimal OS and container image: We validated the scenarios above with Windows Server 2019 (or Windows Server, version 1809 for SAC), so that is the minimal version recommended for using with MSMQ.
  • Persistent volume: Our testing with persistent volume worked fine. In fact, we were able to run MSMQ on Azure Kubernetes Service (AKS) using Azure files.

Authentication with gMSA

From the table above, you can deduce that the only scenario we don’t support is for queues that require authentication with Active Directory. The integration of gMSA with MSMQ is currently not supported as MSMQ has dependencies on Active Directory that are not in place at this point. Our team will continue to listen to customer feedback, so let us know if this is a scenario you and your company are interested in. You can file a request/issue on our GitHub repo and we’ll track customer feedback there.

 

Let us know how the validation of MSMQ goes with your applications. We’re looking forward to hear back from you as you continue to modernize your applications with Windows containers.

Published Dec 14, 2020
Version 1.0
  • Kyle_Burns's avatar
    Kyle_Burns
    Copper Contributor

    Just to check, does the above mean that the below scenario isn't supported:

    Scope

    Transactional

    Queue location

    Authentication

    Send and receive

    Private

    No

    Same container (single container)

    Anonymous

    Yes