我需要使用MSMQ(Microsoft消息队列).它是什么,它是什么,它是如何工作的?它与Web服务有何不同?
尽管对@ Juan的答案充满敬意,但两者都是在两个断开连接的进程之间交换数据的方式,即进程间通信通道(IPC).消息队列是异步的,而Web服务是同步的.他们使用不同的协议和后端服务来实现这一点,因此它们在实现方面完全不同,但目的相似.
当有可能其他通信过程可能不可用时,您可能希望使用消息队列,但您仍希望在客户选择时发送消息.当另一端的进程唤醒并接收到消息到达的通知时,将发生传递.
正如其名称所述,它只是一个队列管理器.
您可以将对象(序列化)发送到它们将保留的队列,直到您收到它们.它通常用于以解耦方式在应用程序之间发送消息或对象
它与webservices无关,它们是两个不同的东西
关于MSMQ的信息:
https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx
WebServices上的信息:
http://msdn.microsoft.com/en-us/library/ms972326.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
方法.消息本身可以是普通的字符串或二进制数据.