我刚刚阅读了一些有关 JMS 和 Apache ActiveMQ 的内容。想知道这里的人们使用 JMS 或类似的消息队列技术在现实世界中有什么用途?

有帮助吗?

解决方案

JMS(ActiveMQ是JMS代理实现)可以用作允许异步请求处理的机制。您可能希望这样做,因为请求需要很长时间才能完成,或者因为多方可能对实际请求感兴趣。使用它的另一个原因是允许多个客户端(可能用不同语言编写)通过 JMS 访问信息。ActiveMQ 是一个很好的示例,因为您可以使用 STOMP 协议来允许从 C#/Java/Ruby 客户端进行访问。

现实世界的示例是用于为特定客户下订单的 Web 应用程序。作为下订单(并将其存储在数据库中)的一部分,您可能希望执行一些额外的任务:

  • 将订单存储在某种第三方后端系统(例如 SAP)中
  • 向客户发送电子邮件,通知他们订单已下达

为此,您的应用程序代码将向 JMS 队列发布一条消息,其中包含订单 ID。侦听队列的应用程序的一部分可能会通过获取 orderId 来响应事件,在数据库中查找订单,然后向另一个第三方系统下订单。应用程序的另一部分可能负责获取 orderId 并向客户发送确认电子邮件。

其他提示

始终使用它们异步处理长时间运行的操作。 Web用户不希望等待超过5秒的时间来处理请求。如果你有一个运行时间超过一个的设计,一个设计是将请求提交到队列并立即发回一个URL,用户可以检查该URL以查看作业何时完成。

发布/订阅是另一种将发送者与许多接收者分离的好方法。这是一个灵活的架构,因为订户可以根据需要来去。

我对 JMS 有很多令人惊奇的用途:

  • 用于客户服务的网络聊天通信。

  • 在后端调试日志记录。所有应用程序服务器都在各个级别广播调试消息。然后可以启动 JMS 客户端来监视调试消息。当然我可以用类似的东西 系统日志, ,但这给了我各种方法来根据上下文信息过滤输出(例如通过应用程序服务器名称、API 调用、日志级别、用户 ID、消息类型等...)。我还对输出进行了着色。

  • 调试日志记录到文件。与上面相同,使用过滤器仅提取特定片段,并将其记录到文件中以进行一般日志记录。

  • 警报。同样,与上述日志记录类似的设置,监视特定错误,并通过各种方式提醒人们(电子邮件、短信、即时消息、Growl 弹出窗口...)

  • 动态配置和控制软件集群。每个应用程序服务器都会广播一条“配置我”消息,然后广播一个配置守护进程,该守护进程将响应一条包含各种配置信息的消息。稍后,如果所有应用程序服务器需要立即更改其配置,则可以通过配置守护程序来完成。

  • 以及通常的延迟活动的排队事务,例如计费、订单处理、配置、电子邮件生成......

在任何您想要保证异步传送消息的地方,它都非常有用。

分布式(a)同步计算。
一个真实世界的例子可以是一个应用程序范围的通知框架,它在应用程序使用过程中的各个点向利益相关者发送邮件。因此,应用程序将通过创建Producer对象,将其置于特定的Message并继续前进来充当Queue
会有一组Consumer s订阅MessageBroker有问题的人,并会小心处理发送过的<=>。请注意,在此事务过程中,<=> s与如何处理给定<=>的逻辑分离。 点击 消息传递框架(ActiveMQ等)充当通过提供<=> s来促进此类<=>交易的支柱。

我用它在不同的基金管理系统之间发送日内交易。如果您想了解更多关于什么是伟大的技术消息,我可以完全推荐这本书<!> << 企业集成模式 <!> QUOT ;.有一些JMS示例用于请求/回复和发布/订阅。

消息传递是一种很好的集成工具。

我们使用它来启动我们不想中断或与现有事务冲突的异步处理。

例如,假设你有一个昂贵且非常重要的逻辑,比如<!>“买东西<!>”,购买东西的一个重要部分就是“通知东西商店”。我们使通知调用异步,以便通知调用中涉及的任何逻辑/处理都不会阻止或与使用购买业务逻辑的资源竞争。最终结果,购买完成,用户满意,我们得到了我们的钱,并且因为队列是有保证的交付,所以商店一打开就会收到通知,或者一旦队列中有新项目就会收到通知。

我将它用于我的学术项目,这是一个类似亚马逊的在线零售网站。 JMS用于处理以下功能:

  1. 当货物从一个地点移动到另一个地点时,更新客户下订单的位置。这是通过不断向JMS队列发送消息来完成的。
  2. 警告任何异常事件,例如货件延迟,然后向客户发送电子邮件。
  3. 如果送货到达目的地,则发送送货活动。
  4. 我们有多个也实现了连接到主服务器的远程客户端。如果连接可用,则它们用于访问主数据库,或者如果不使用自己的数据库。为了处理数据一致性,我们实施了2PC机制。 为此,我们使用JMS来交换这些系统之间的消息,即一个充当协调器的人将通过在队列上发送消息来启动该过程,而其他人将通过在队列上再次发送消息来响应。 正如其他人已经提到的,这与pub / sub模型类似。

我见过JMS用于不同的商业和学术项目。只要您想要一个完全分离的分布式系统,JMS就可以很容易地进入您的画面。一般来说,当您需要从一个节点发送请求时,网络中的某个人在没有/向发送者提供有关接收者的任何信息的情况下处理它。

就我而言,我在论文中使用JMS开发了面向消息的中间件(MOM),其中特定类型的面向对象的对象作为您的请求在一侧生成,并在另一侧编译和执行作为你的回应。

Apache Camel 与ActiveMQ结合使用是实现企业集成模式的好方法

我们使用短信来生成在线报价

我们正在使用JMS与不可靠网络上的大量远程站点中的系统进行通信。松散耦合与可靠的消息传递相结合,可以产生稳定的系统环境:每条消息都会在技术上尽快发送,网络中的大问题不会对整个系统环境产生影响......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top