我需要使用 MSMQ(Microsoft 消息队列)。它是什么,它是做什么用的,它是如何工作的?它与网络服务有何不同?
9 回答
在充分尊重@Juan 的回答的情况下,两者都是在两个断开连接的进程之间交换数据的方式,即进程间通信通道(IPC)。消息队列是异步的,而 Web 服务是同步的。它们使用不同的协议和后端服务来执行此操作,因此它们在实现上完全不同,但目的相似。
当其他通信进程可能不可用时,您可能希望使用消息队列,但您仍希望在客户端选择时发送消息。当另一端的进程唤醒并收到消息到达的通知时,将发生传递。
顾名思义,它只是一个队列管理器。
您可以将对象(序列化)发送到队列中,直到您收到它们为止。它通常用于以解耦的方式在应用程序之间发送消息或对象
它与webservices无关,它们是两个不同的东西
关于 MSMQ 的信息:
https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx
网络服务信息:
事务队列管理 101
事务队列是一种中间件系统,它在任何给定时间可能连接或不连接的主机之间异步路由另一种消息。这意味着它还必须能够在某处持久保存消息。此类系统的示例是MSMQ和IBM MQ
事务队列也可以参与分布式事务,回滚可以触发消息的处置。这意味着消息保证以最多一次语义传递,或者如果不回滚,则保证传递。如果出现以下情况,则不会传递消息:
主机 A 发布消息,但主机 B 未连接
某些东西(可能但不一定从主机 A 发起)回滚事务
B 事务回滚后连接
在这种情况下,B 将永远不会知道该消息甚至存在,除非通过其他媒介通知。如果事务被回滚,这可能无关紧要。如果 B 在事务回滚之前连接并收集消息,回滚也会反转消息对 B 的影响。
请注意,A 可以将消息发布到队列并保证最多一次传递。如果事务被提交,主机 A 可以假设消息已经由可靠的传输介质传递。 如果事务回滚,主机 A 可以假定消息的任何影响都已被逆转。
网页服务
Web 服务是由(通常)HTTP 服务器发布的远程过程调用或其他服务(例如RESTFul API )。它是一个同步请求/响应协议,不保证协议内置的交付。由客户端来验证服务是否已正确运行。通常,这将通过对请求的回复或呼叫超时来实现。
在后一种情况下,Web 服务不保证最多一次语义。服务器可以完成服务但无法提供响应(可能是由于服务器外部出现问题)。应用程序必须能够处理这种情况。
IIRC,RESTFul 服务应该是幂等的(在多次调用同一服务后达到相同的状态),这是一种解决 Web 服务架构中缺乏保证的成功/失败通知的策略。 这个想法是,从概念上讲,写状态而不是调用服务,因此可以写任意次数。这意味着应用程序可以容忍缺少有关成功的反馈,因为它可以重新尝试发布,直到它从服务器获得“成功”消息。
请注意,您可以将 Windows Communication Foundation (WCF) 用作 MSMQ 之上的抽象层。这让您有一种使用服务的感觉——只有单向操作。
有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/ms789048.aspx
--larsw
实际上,MSMQ 和 WebService 之间没有任何关系。使用 MSMQ 进行进程间通信(您还可以使用套接字、Windows 消息传递、映射内存)。它是一个 Windows 服务,负责保存消息直到有人将它们出队。您可以说它比套接字更可靠,因为消息存储在硬盘上,但它比其他 IPC 技术慢。
您可以通过少量代码在 dotnet 中使用 MSMQ,只需声明您的MessageQueue
对象并调用Receive
和Send
方法。Message 本身可以是普通的字符串或二进制数据。
正如大家所解释的,MSMQ 被用作消息队列。消息可以是实际数据、对象和任何您可以序列化和通过网络发送的东西的包装器。MSMQ 有它自己的局限性。MSMQ 1.0 和 MSMQ 2.0 的消息限制为 4MB。MSMQ 3.0 取消了此限制。面向消息的中间件 (MOM) 是一个严重依赖于消息传递的概念。企业服务总线基础建立在消息传递之上。所有这些新技术都依赖于可靠的异步数据传递消息传递。
谷歌搜索“MSMQ”的前几个链接应该有帮助......
http://msdn.microsoft.com/en-us/library/ms711472(VS.85).aspx
http://www.microsoft.com/windowsserver2003/techinfo/overview/msmqfaq.mspx
MSMQ- Microsoft 消息队列:
• MSMQ 是 Microsoft 开发的消息队列实现。
• 它部署在其Windows Server 操作系统中。
• 它是一种消息传递协议,允许在不同服务器/进程上运行的应用程序以故障安全方式进行通信。
• MSMQ 在企业中通常用于构建软件。
• MSMQ 将未能到达其预期目的地的消息放入队列中,然后在到达目的地后重新发送它们,从而确保可靠传递。
• MSMQ 还支持事务。它允许在多个队列上进行多个操作,所有操作都包装在一个事务中,从而确保所有操作或没有任何操作生效。
• 消息队列(MSMQ) 技术使在不同时间运行的应用程序能够跨异构网络和可能暂时离线的系统进行通信。
以下端口用于 Microsoft 消息队列操作:
• TCP:1801
• RPC:135、2101*、2103*、2105*
• UDP:3527、1801
MSMQ 代表 Microsoft 消息队列。
它只是以格式化方式存储消息的队列,以便它可以传递给数据库(可能在同一台机器上或服务器上)。那里有不同类型的队列,它们对消息进行分类。如果消息内部存在一些问题/错误或传递的无效消息会自动进入死队列,这表示它没有进一步处理。但是在将消息传递到死队列之前,它会重试最大计数,直到它没有被处理然后它可以将它发送到死队列。它通常用于将日志消息从客户端机器发送到服务器或数据库,以便如果客户端机器上发生任何问题,那么开发人员或支持团队可以通过日志来解决问题。MSMQ 是微软提供的获取 Log 文件记录的服务,使用 Log 文件轻松获取解决方案。你从这个博客得到更好的主意 http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx