我刚刚在阅读有关JMS和Apache ActiveMQ的内容,想知道这里的人们使用JMS或类似的消息队列技术的真实世界用途是什么?
我刚刚在阅读有关JMS和Apache ActiveMQ的内容,想知道这里的人们使用JMS或类似的消息队列技术的真实世界用途是什么?
JMS(ActiveMQ是JMS代理实现)可用作机制,允许异步请求处理。您可能希望这样做是因为请求需要很长时间才能完成或多个方可能对实际请求感兴趣。使用它的另一个原因是允许多个客户端(可能编写在不同的语言中)通过JMS访问信息。ActiveMQ在此处是一个很好的示例,因为您可以使用STOMP协议允许C#/Java/Ruby客户端访问。
一个真实的例子是一个用于为特定客户下订单的Web应用程序。在下订单(并将其存储到数据库中)的过程中,您可能希望执行一些其他任务:
为了做到这一点,您的应用程序代码将发布一个包含订单ID的消息到JMS队列中。监听队列的应用程序的一部分可能会通过获取订单ID,在数据库中查找该订单,然后将该订单放置到另一个第三方系统中。您的应用程序的另一部分可能负责获取订单ID并向客户发送确认电子邮件。
这些技术常用于异步处理长时间运行的操作。网页用户不希望等待超过5秒钟来处理请求。如果您有一个比这更长的请求,一种设计方法是将请求提交到队列中,并立即返回一个URL,供用户检查作业何时完成。
发布/订阅是另一种很好的解耦发送者和多个接收者的技术。这是一种灵活的架构,因为订阅者可以根据需要随时加入或退出。
我已经有很多关于JMS的令人惊奇的用途:
用于客户服务的Web聊天通讯。
后端调试日志记录。所有应用服务器会以各种不同级别广播调试消息。然后可以启动JMS客户端来监视调试消息。当然,我也可以使用类似于 syslog 的东西,但是它为我提供了各种基于上下文信息(例如按应用服务器名称、API调用、日志级别、用户ID、消息类型等)过滤输出的方法。我也给输出加上颜色。
将调试日志记录到文件。与上面相同,只是使用过滤器从中提取出特定部分,并记录到文件进行一般日志记录。
警报。再次,类似于上面的日志记录设置,观察特定错误并通过各种方式(电子邮件、短信、即时消息、Growl弹出窗口等)通知相关人员。
动态配置和控制软件群集。每个应用服务器都会广播“配置我”消息,然后一个配置守护程序会响应一个包含各种配置信息的消息。稍后,如果需要一次更改所有应用服务器的配置,可以从配置守护程序中完成。
常规用途 - 用于排队的事务以进行延迟活动,例如计费、订单处理、供应、电子邮件生成等。
JMS非常适用于任何需要异步传递消息并保证交付的地方。
我曾经用它来完成我的学术项目,这个项目是一个类似于亚马逊的在线零售网站。 JMS被用于处理以下功能:
我们还实现了连接到主服务器的多个远程客户端。如果有连接可用,它们将访问主数据库,否则使用自己的数据库。为了处理数据一致性,我们实现了2PC机制。 为此,我们使用JMS在这些系统之间交换消息,即一个充当协调员的系统通过在队列上发送消息来启动过程,其他系统将根据需要再次通过队列发送消息进行响应。 正如其他人已经提到的那样,这与发布/订阅模型类似。
我曾在不同的商业和学术项目中看到过JMS的使用。当您需要一个完全解耦的分布式系统时,JMS可以很容易地进入您的视野。一般来说,当您需要从一个节点发送请求,而您网络中的某个人负责处理它而不/或者给发送者有关接收方的任何信息时,JMS就会派上用场。
在我的情况下,我在我的论文中开发了一个面向消息的中间件(MOM),其中特定类型的面向对象的对象在一侧生成作为您的请求,在另一侧编译并执行作为您的响应。