什么是Microsoft消息队列(MSMQ)?它是如何工作的?

时间:2008-12-30 12:03:53

标签: msmq

我需要使用MSMQ(Microsoft消息队列)。它是什么,它是什么,它是如何工作的?它与Web服务有何不同?

9 个答案:

答案 0 :(得分:47)

对@ Juan的回答充分尊重,两者都是在两个断开连接的进程之间交换数据的方式,即进程间通信通道(IPC)。消息队列是异步的,而Web服务是同步的。他们使用不同的协议和后端服务来实现这一点,因此它们在实现方面完全不同,但目的相似。

如果其他通信过程可能无法使用,您可能希望使用消息队列,但您仍希望在客户选择时发送消息。当另一端的进程唤醒并收到消息到达的通知时,将发生传递。

答案 1 :(得分:39)

正如其名称所述,它只是一个队列管理器。

您可以将对象(序列化)发送到队列,直到您收到它们为止。 它通常用于以解耦方式在应用程序之间发送消息或对象

它与webservices无关,它们是两个不同的东西

有关MSMQ的信息

https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx

有关Web服务的信息

http://msdn.microsoft.com/en-us/library/ms972326.aspx

答案 2 :(得分:28)

交易队列管理101

事务性队列是一种中间件系统,它在任何给定时间可能连接或未连接的主机之间异步路由一种另一种的消息。这意味着它还必须能够在某处持久保存消息。此类系统的示例包括MSMQIBM MQ

交易队列也可以参与distributed transaction,回滚可以触发消息的处理。这意味着如果不回滚,则保证消息具有at-most-once语义或保证传递。如果出现以下情况,将不会传递此消息:

  • 主持人A发布消息但主持人B. 没有连接

  • 东西(可能但不是 必须从主持人A发起 回滚交易

  • B在事务发生后连接     回滚

在这种情况下,除非通过其他媒介通知,否则B将永远不会知道该消息甚至存在。如果事务被回滚,这可能无关紧要。如果B在事务回滚之前连接并收集消息,则回滚也将反转消息对B的影响。

请注意,A可以将邮件发布到队列,并保证最多一次传递。如果事务已提交,则主机A可以假定消息已经delivered by the reliable transport medium.如果事务被回滚,则主机A可以假定消息的任何影响已被反转。

网络服务

由(通常)HTTP服务器发布的网络服务remote procedure call或其他服务(例如RESTFul API's)。它是一种同步请求/响应协议,无法保证协议中内置的传输。由客户端来验证服务是否已正确运行。通常,这将通过回复请求或呼叫超时。

在后一种情况下,Web服务不保证最多一次语义。服务器可以完成服务并且无法提供响应(可能通过服务器外部的某些内容出错)。应用程序必须能够处理这种情况。

IIRC,RESTFul服务应该是幂等的(在同一服务的任意数量的调用之后实现相同的状态), 这是一种处理这种缺乏保证成功/失败通知的策略。 Web服务体系结构。 这个想法是概念上写一个状态而不是调用服务,所以可以写任意次。这意味着应用程序可以容忍缺乏关于成功的反馈,因为它可以重新尝试发布,直到它从服务器获得“成功”消息。

答案 3 :(得分:22)

请注意,您可以使用Windows Communication Foundation(WCF)作为MSMQ上方的抽象层。这使您感觉使用服务 - 只需单向操作。

有关详细信息,请参阅:  http://msdn.microsoft.com/en-us/library/ms789048.aspx

- larsw

答案 4 :(得分:8)

实际上MSMQ和WebService之间没有关系。 使用MSMQ进行进程间通信(您还可以使用套接字,Windows消息传递,映射内存)。 它是一个Windows服务,负责保持消息,直到有人将它们出列。 你可以说它比套接字更可靠,因为消息存储在硬盘上,但它比其他IPC技术慢。

您可以在dotnet中使用MSMQ和少量代码,只需声明您的MessageQueue对象并调用ReceiveSend方法。 消息本身可以是普通的字符串或二进制数据。

答案 5 :(得分:2)

正如大家所解释的那样,MSMQ被用作消息队列。消息可以包装为实际数据,对象以及可以通过线路进行序列化和发送的任何内容。 MSMQ有自己的局限性。 MSMQ 1.0和MSMQ 2.0有4MB的消息限制。这一限制因MSMQ 3.0而被取消。面向消息的中间件(MOM)是一种严重依赖于消息传递的概念。企业服务总线基础构建于Messaging之上。所有这些新技术都依赖于Messaging来实现异步数据的可靠性。

答案 6 :(得分:1)

答案 7 :(得分:1)

MSMQ- Microsoft消息队列: •MSMQ是Microsoft开发的消息队列实现。 •它部署在Windows Server操作系统中。 •它是一种消息传递协议,允许在不同服务器/进程上运行的应用程序以故障安全方式进行通信。 •MSMQ通常在企业中用于构建软件。 •MSMQ通过将无法到达其预期目标的消息放入队列中,然后在目标可访问后重新发送,从而确保可靠的传送。 •MSMQ还支持交易。它允许在多个队列上进行多个操作,所有操作都包含在单个事务中,从而确保所有操作或不执行任何操作。 •消息队列(MSMQ)技术使在不同时间运行的应用程序可以跨异构网络和可能暂时脱机的系统进行通信。 以下端口用于Microsoft消息队列操作: •TCP:1801 •RPC:135,2101 *,2103 *,2105 * •UDP:3527,1801

答案 8 :(得分:0)

MSMQ代表Microsoft Messaging Queue。

它只是以格式化方式存储消息的队列,以便它可以传递给DB(可以在同一台机器上或在服务器上)。那里有不同类型的队列,它们之间对消息进行分类。如果消息内部存在某些问题/错误或者自动传递无效消息则进入死队列,这表示它没有进一步处理。但是在将消息传递给死队列之前,它将重试最大计数,直到它不处理,然后它可以将它发送到死队列。它通常用于从客户端机器向服务器或数据库发送日志消息,以便在客户端计算机上发生任何问题时,开发人员或支持团队可以通过日志来解决问题。 MSMQ是Microsoft提供的服务,用于获取日志文件的记录,并使用日志文件轻松获取解决方案。 您可以通过此博客http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx

获得更好的创意