What is MSMQ?
Microsoft Message Queuing, or MSMQ, is technology for asynchronous
messaging. Whenever there's need for two or more applications
(processes) to send messages to each other without having to immediately
know results, MSMQ can be used. MSMQ can communicate between remote
machines, even over internet. It's free and comes with Windows, but is
not installed by default.
Typical usage
Typical example of MSMQ usage would be order processing
application: orders are collected online using web forms and by sales
team using some offline application. Order processing is slow, because
third party payment provider is used. Third party resource can be
unavailable at times and we don't want that failure to affect our
application - we can delay processing of pending orders, but new orders
must be collected.
Notification web page should be immediately displayed to user,
even if that order is processed hours later. Sales must collect orders
offline and send them to processing later, when connection with order
processing server is available. After payment is processed it should be
enough just to send message that shipment should be sent, and not wait
for delivery to be completed. MSMQ is ideal for these kind of scenarios -
when applications should be isolated and work even if other
applications they interact with are down or unavailable.
From programming point of view, MSMQ is very easy - applications
just need to send and receive messages, MSMQ will take care of message
delivery, wait until recipient is available, etc. MSMQ supports
transactions, if processing fails for any reason message can be returned
back to queue to be retried later. Distributed transactions with
database operations are supported too, if COM+ is used.
Alternative to MSMQ
Another approach to isolate applications could be to use some
shared resource, like database. First application would write there data
for processing. Another application would have to periodically check if
there's something new, and process it. Beside inefficiency of pinging
database constantly, this approach requires much more work - some
protocol must be created to know if message (i.e. row) is pending or
processed. However this is tip of an iceberg - MSMQ offers much more:
messages can have different priority, limited life time, notification of
success or failure can be delivered, processed messages can be stored
in journal, etc. All this functionality would have to be reinvented.
When things go wrong
So far one of main reasons not to use MSMQ was lack of tools that
could help when things go wrong. And they do go wrong. Most notorious
problem are poison messages - when some message can not be processed and
blocks entire queue. If we implement manual messaging using database
every situation could be solved by manual database modifications.
If MSMQ is used messages and queues are in proprietary format
which cannot be edited directly. Only available management tool is MMC
administration console (or MqExplorer in earlier versions). If it can't
do what you need you're out of luck - you have to write some code that
accesses MSMQ API directly. Problem is even simplest operations like
deleting or copying messages are not available from MMC!
Fortunately with tool like QueueExplorer
troubleshooting becomes much easier - all commonly used operations are
available from explorer-like interface.
分享到:
相关推荐
msmq消息队列相关
vc编写,操作msmq的例子,封装成class,可直接调用!
An Sample show how to send command from an application to another one by using MSMQ
NET MSMQ 完整教程 代码+文档 可直接运行
MSMQ项目总结示例代码 MSMQ项目总结\MSMQ数据库数据传输.rar MSMQ项目总结\MSMQ基类.rar MSMQ项目总结\MQ事务性消息传输.rar MSMQ项目总结\MSMQ单线程监控.rar MSMQ项目总结\MSMQ文件发送接收.rar MSMQ项目总结\MSMQ...
msmq消息队列相关
无法启动MSMQ服务
C#MSMQ 消息队列工具,MSMQ(消息队列) 前段时间研究WCF接触到了MSMQ,弄了一个小工具 分享一下
WIN7中安装MSMQ,.NET调用MSMQ
简单的msmq例子
MSMQ全称MicroSoft Message Queue,微软消息队列,是在 多个不同的应用之间实现相互通信的一种异步传输模式,【CLR】C#操作MSMQ示例
C#语言实现的MSMQ,可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。
微软MSMQ 操作消息队列的例子 包括如何创建消息队列以及如何传递消息等 是较好的例子
一个再简单不过的MSMQ程序,适合C#初学者。
MSMQ 客户端代码 修改URL后直接可用
MSMQ消息队列
MSMQ 学习 例子 C# Winform
msmq应用代码,
MicroSoft Message Queuing(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于...本实例采用c#实现了MSMQ实现了消息生成段和消费端的示例。