在我的工作中,如果没有人颂扬MQ系列或MSMQ之类的优点,很难走五分钟,而且我总是想知道,在流行语的闪光过去之后,有哪些实际的示例< / em>这些精彩的设备出现在现实世界中。
我正在寻找的东西可能会激发我找到其中一个的用途或者给我一些我可以用来评估消息总线/消息代理/消息队列的度量 - 地狱,甚至是某些东西这将解释上述消息之间的差异。
答案 0 :(得分:15)
MQ系列或MSMQ等消息队列解决方案广泛用于集成分布式企业应用程序,尤其是在不同平台上运行。做得好(使用持久队列,异步设计而不是'RPC over MQ'并注意操作要求),与同步请求/回复集成(如RPC或样板Web服务)相比,这为您提供了高可用性(其可用性是各自可用性的产物:同步地将10个系统与99%可用性集成在一起,可以提供不超过90%的组合可用性 - 或者如果只有一个弱链接则更糟糕。请注意,这需要消息队列本身具有高可用性:我们使用我们的大型机来实现这一目的(猜测我们正在使用哪种产品!)。
消息(或集成)经纪人和“公共汽车”是一个更复杂的鱼。他们可以添加
我已经按照大致递增的难度(和潜在的奖励)顺序列出了这些功能。您获得的越高,您的组织(包括业务方面)需要越成熟,以获得优势。
答案 1 :(得分:4)
在不详细介绍特定产品的情况下,我可以为您提供使用典型消息排队系统的一些好处。
它们通常是用于模拟发布者/订阅者模式的良好基础结构。想想一个大事件系统,您不仅限于一个可执行文件,甚至一台机器。您将信息放入这些队列中,这样任何正在监听它的应用程序都可以获取数据。
大多数消息队列系统允许持久队列。想想典型的事件系统。如果听众在事件发生时断开连接或无响应,则错过该事件。使用持久性消息队列,消息将保留在队列中,直到重新连接侦听器。没有数据/事件以这种方式丢失。
我不知道您列出的产品,但我知道使用JMS,您可以对线程进行细粒度控制,因为消息会从队列中弹出。理论上,您可以为每个队列创建一个线程,在该线程中执行操作,并在消息被删除时对其进行操作。或者,您可以从共享线程中的多个队列中提取消息并对它们执行操作。
答案 2 :(得分:4)
虽然我对MQ系列有一段非常痛苦的经历,部分原因是它被合作公司推到我们(微软商店)这一事实,使用MQ系列(或任何消息系统)是不可或缺的一部分到申请。
基本上,我们正在构建一个处理延期交货项目供应链完整性的流程。如果我们的合作伙伴经销商没有他们客户想要的商品,他们会向B2B网站发送消息,该网站将针对可以履行订单的潜在公司。
我们构建了两种不同的集成方式。第一种是ftp方法,其中固定宽度文件定期来回发送,我们添加了各种规则以帮助确保我们不会遗漏任何数据。
第二个是使用MQ Series,其中使用guarenteed传递将消息放入队列。然后我们将弹出队列并处理消息。排队系统在这里是非常有益的,因为它使我们能够以可靠的方式传输关键信息,导致真钱转移。
在具有相同MQ系列的另一面,我们必须实现同步查询以获取信息。我们希望它是同步的,因为通过网络访问它的用户会等待获取信息。在MQ Series上做这件事是一个非常有趣和痛苦的挑战。这里使用MQ的唯一原因是因为它是现有的通信线路,并且查询功能已经存在。
第二个例子,这次使用的MSMQ是一个从注入客户端应用程序的dialhome代码中收集信息的站点。 dialhome代码将收集功能使用情况统计信息,如Microsoft的SQM程序。当消息进入Web服务时,我们会将它们放在队列中,然后我们可以让任意数量的应用程序服务器弹出消息并将它们推送到数据库以进入仓库。
MSMQ确保我们可以通过快速将它们放在队列中来处理消息突发。这有助于系统的可扩展性和可靠性。
答案 3 :(得分:4)
消息队列对于实现负载平衡很有用。例如,服务器接收“作业”消息(订单,状态消息......)并将它们分发给所有侦听客户端。
消息队列保证将消息传递给一个客户端。
如果客户端在不同的计算机上运行,则总负载将被分配,并且在必要时很容易将另一个客户端抛向消息加载,客户端只需连接到队列并将接收(某些)消息。
答案 4 :(得分:3)
良好的排队系统使得在多个线程,处理器,机器(甚至组织)上进行分布式计算变得更加容易。
前段时间(10年)我使用消息发送隐喻来为交易商经纪人实施前台期权定价系统。我们使用C ++,VB6和Excel / VBA(甚至使用Excel解算器!!),数据存储作为平面文件和sql,最终用户应用程序在Excel和VB6中编写,具有复杂的数据模型(市场数据,产量)曲线和体积曲面)。异步消息传递(使用持久性/可靠消息和pub / sub)使整个过程非常有效和可扩展 - 我们能够将东京和纽约办事处添加到伦敦基础设施,甚至无需访问远程站点 - 只是标准安装。 / p>
虽然我对他们在过去10年左右没有进入多远感到惊讶,但我是一个狂热的粉丝。
答案 5 :(得分:2)
来自真实项目的一个非常“接近要求”的例子。谁跑了几年。在ActiveMQ上
1)航运市场贸易中心。
船公司有系统知道他们可以实时发送多少包。
每个系统都不同(例如:语言,设计等)
我们为每家公司编写了一个适配器“非常特殊的IT系统到ActiveMQ”
每个适配器都有一个简单的工作要做:当公司有可用空间时,以及以什么价格发布。 (“运输主张”)
我们写了一个收集所有“交通命题”的客户,并很好地展示它们。
=&GT;当当。对于不想互相交谈的公司,您有一个跨平台/语言/流程系统
=&GT; Ta-da 2:如果一家新公司想进入您的交易系统,他们只需要编写适配器。