[译]JMS介绍 – Java消息服务
JMS 代表 Java 消息服务,它是 Java 中访问消息中间件服务器的标准。这是一个 JMS 介绍教程,为您提供消息传递和 JMS 的简要概述。您将了解使用 JMS 的优势以及 JMS 中的不同消息传递模型。
什么是消息传递?
消息传递是跨各种应用程序或服务交换业务数据的过程。消息通常是其他应用程序或服务使用的异步请求、响应、报告或事件。这些消息包含重要信息。
消息传递为微服务架构提供了可扩展性。消息传递也传统上用于面向服务的架构,以在它们之间建立异步且可靠的通信。
消息系统也称为面向消息的中间件产品。目前有多种消息中间件可供选择,例如 ActiveMQ、RabbitMQ、ActiveMQ Artemis、Apache Kafka、应用服务器(Glassfish、Wildfly、Websphere MQ)等。
使用消息中间件的优点
- 可靠性– 消息中间件保证交付。如果消费者因某种原因宕机,消息系统会存储消息,直到其再次启动。
- 异步– JMS 是异步的,发送者和接收者不需要互相等待。
- 易于集成– 多个应用程序可以用不同的编程语言编写或运行在不同的服务器上。只要它们使用相同的协议,就可以使用消息中间件在它们之间建立通信。
- 可扩展性——消息传递有助于向多个接收者广播,从而有助于实现可扩展性。
- 灵活性——您可以为不同的消息分配不同的协议,这使您在设计架构时具有很大的灵活性。
什么是 JMS?
目前有几种企业消息中间件(面向消息的中间件)产品,如 TIBCO MQ、Apache ActiveMQ、Apache Kafka、RabbitMQ、ActiveMQ Artemis、IBM MQ 等。
JMS 提供了标准的 Java API,这意味着 Java 程序可以创建、发送、接收和读取企业消息系统的消息。我们将探讨 JMS 1.x 和 2.0 API 标准。
并非所有企业消息中间件都实现 JMS 标准。实现 JMS 标准的中间件称为 JMS 提供程序。其中包括 Apache ActiveMQ、Apache ActiveMQ Artem、Oracle WebLogic Server、Glassfish、IBM MQ、Jboss Wildfly、Apache Qpid 等。无论您使用哪种实现,如果您坚持 JMS 标准,切换供应商都很简单。
JMS 不可互操作,这意味着它主要用于用 Java 或 JVM 语言编写的应用程序。如果您想使用具有更好互操作性支持的消息传递协议(可以在 NodeJS、Python、C# 等中工作),请查看AMQP(高级消息队列协议),例如 RabbitMQ。
JMS 标准的局限性
JMS 标准不包括以下功能,因为 JMS 仅用于发送和接收消息。
- 负载平衡/容错
- 错误/建议通知
- JMS 提供程序的管理 API
- 安全
- 没有消息类型存储库定义
JMS 中的消息传递模型
JMS 支持两种主要的消息传递样式,如下所示。作为 JMS 介绍的一部分,我们在此仅讨论这些类型,本教程的后面部分将通过几个示例介绍每种类型。
点对点 (PTP) – 在 PTP 模型中,发送方通过名为Queue的中介将消息发送到另一个客户端(接收方)。只有一个接收方读取该消息。
发布和订阅 (pub/sub) – 在 Pub/Sub 模型中,客户端通过名为Topic的中介向多个接收者发送消息。发送者将消息发布到特定主题,多个接收者订阅该主题。
JMS 应用程序的组件
一个典型的JMS应用程序由以下几个部分组成。
- JMS 客户端– 发送和接收消息的 Java 代码。
- 非 JMS 客户端– 利用系统的本机 API。
- 消息– 正在发送或接收的业务数据。
- JMS 提供程序– 实现 JMS 以及其他管理功能的消息系统,也称为 MOM(面向消息的中间件)。
- 管理对象– 它们基本上是 JMS 提供程序中预先配置的目标(队列、主题)和连接工厂。
JMS 中的安全功能
JMS 不提供控制或配置消息完整性或消息隐私的功能。预计许多 JMS 提供商将提供此类功能。这将由 JMS 提供商使用特定的管理工具来处理。
现在,您已经通过本 JMS 入门教程对消息传递和 JMS 有了深入的了解。接下来,我们将安装和设置 JMS 消息传递服务器。