2008-12-30 69 views

回答

38

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

您可以将对象(序列化)发送到它们将保留的队列,直到您接收它们。 它通常用来发送应用程序之间的信息或对象处于分离的方式

它无关的Web服务,它们是两个不同的东西

信息上MSMQ

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

Info on WebServices

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

+3

上MSMQ上面的链接没有工作(重定向到一些一般信息页面),但这个网址为我工作https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx – 2015-11-30 11:51:51

45

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

当可能有其他通信过程可能不可用的情况下,您希望使用消息队列,但您仍然希望在客户端选择时发送消息。当另一端的进程被唤醒并接收到消息到达的通知时,交付将发生。

+4

感谢尊重=) 我将MSMQ作为一种将应用程序发送到应用程序的方式,而不需要响应为其他应用程序传递数据以执行任何想要的操作,并将Web服务作为“调用远程函数”的参数和结果,我使用这些函数具体目的 – juan 2008-12-30 12:26:39

27

事务队列管理101

一个事务队列是一个中间件系统的一个排序之间的另一个的异步消息路由在任何给定时间可能连接或可能不连接的主机。这意味着它也必须能够将消息保存在某个地方。这样的系统的示例是MSMQIBM MQ

交易队列也可以参与distributed transaction,并且回滚可以触发消息的处理。这意味着如果未回滚,则保证将以at-most-once语义或保证投递传递消息。该消息将不会传递,如果:

  • 主机A帖子 未连接

  • 东西(可能但不是必然 从主机A发起)消息,但主机B 回滚事务

  • B连接后的交易 回滚

在这种情况下,B将永远不会意识到该消息甚至存在,除非通过其他介质通知。如果事务回滚了,这可能没有关系。如果B在事务回滚之前连接并收集消息,则回滚还将反转消息对B的影响。

请注意,A可以将消息发布到队列中,保证最多一次交货。如果事务已提交,则主机A可以认为该消息已被delivered by the reliable transport medium.如果事务回滚,则主机A可以认为消息的任何影响已被逆转。

Web服务

Web服务是remote procedure call或其他服务(例如RESTFul API's)由(通常)HTTP服务器发布。它是一个同步的请求/响应协议,并不保证内置到协议中。客户端需要验证服务是否已正确运行。通常这将通过对呼叫的请求或超时的回复。

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

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

2

正如大家所解释的,MSMQ被用作消息队列。消息可以封装实际的数据,对象和任何可以串行化并通过线路发送的内容。 MSMQ有其自身的局限性。 MSMQ 1.0和MSMQ 2.0具有4MB的消息限制。 MSMQ 3.0解除了这个限制。面向消息的中间件(MOM)是一个很大程度上依赖于消息传递的概念。企业服务总线基础建立在消息传递上。所有这些新技术都依赖于消息传递来提供可靠的异步数据传输。

8

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

您可以用小的代码行DOTNET使用MSMQ,只是声明你MessageQueue对象,并调用ReceiveSend方法。消息本身可以是正常的字符串或二进制数据。

0

MSMQ代表Microsoft Messaging Queue。

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

1

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

相关问题