JMS消息中间件


JMS(Java Message Service)即 Java 消息服务应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java 消息服务是一个与具体平台无关的 API,绝大多数 MOM 提供商都对JMS 提供支持。
简短来说,JMS 是一种与厂商无关的 API,是 sun 公司为了统一厂商的接口规范,而定义出的一组api接口,用来访问消息收发系统消息。它类似于 JDBC(Java Database Connectivity),提供了应用程序之间异步通信的功能。
JMS(Java Message Service)是Java语言提供的用于构建面向消息的应用程序的API标准。它定义了一套用于发送、接收和管理消息的API规范,使得开发者可以使用统一的方式与不同的消息中间件进行交互。

  1. 消息模型: JMS采用了基于消息的异步通信模型。在JMS中,消息由生产者(Producer)发送到消息中间件(Message Broker),然后由消费者(Consumer)从中间件接收和处理消息。这种模型解耦了生产者和消费者之间的直接依赖关系,提供了更灵活、可靠的消息传递方式。
  2. JMS消息类型: JMS定义了不同类型的消息,包括文本消息(TextMessage)、字节消息(BytesMessage)、对象消息(ObjectMessage)、映射消息(MapMessage)等。开发者可以根据实际需求选择合适的消息类型来发送和接收消息。
  3. JMS队列(Queue)和主题(Topic): JMS提供了两种主要的消息传递模型:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。在点对点模型中,消息被发送到一个队列,并由一个消费者接收和处理;而在发布/订阅模型中,消息被发送到一个主题,并可以由多个消费者订阅并接收。
  4. 连接工厂(ConnectionFactory): 在使用JMS API之前,需要通过连接工厂来创建一个JMS连接。连接工厂负责与消息中间件建立连接,并提供了创建会话(Session)和目的地(Destination)的方法。
  5. 会话(Session): 会话是JMS的核心对象之一,用于创建生产者、消费者以及发送和接收消息。会话可以是事务性的或非事务性的,开发者可以根据需求选择合适的模式。
  6. 目的地(Destination): 目的地表示消息发送和接收的位置,它可以是队列(Queue)或主题(Topic)。生产者将消息发送到目的地,消费者从目的地接收消息。
  7. 消息监听器(MessageListener): JMS支持使用消息监听器来异步接收和处理消息。开发者可以实现一个消息监听器接口,在接收到消息时自动触发相应的处理逻辑。
  8. 事务管理: JMS支持事务处理,开发者可以在会话中启用事务,并使用提交(commit)或回滚(rollback)操作来管理消息的发送和接收过程。
    Java Message Service (JMS) 是一个用于在 Java 应用程序中发送、接收和处理消息的 API。它是一种异步通信机制,允许应用程序之间解耦并能够实现消息传递。以下是 JMS 架构的详细解析。

jms组件

Java Message Service (JMS) 是一个用于在 Java 应用程序中发送、接收和处理消息的 API。它是一种异步通信机制,允许应用程序之间解耦并能够实现消息传递。
JMS 定义了一种消息通信的标准,主要用于企业级应用的异步消息传递。通过 JMS,应用程序可以将消息发送到消息队列或主题,从而实现异步处理和负载均衡。
2. JMS 组件
JMS 架构主要包括以下几个组件:
消息生产者(Producer):负责创建并发送消息到目的地(Queue 或 Topic)。
消息消费者(Consumer):从目的地接收消息并处理。
目的地(Destination):
队列(Queue):用于点对点(Point-to-Point)通信,消息发送到队列后,只有一个消费者可以接收。
主题(Topic):用于发布-订阅(Publish-Subscribe)模式,消息发送到主题后,所有订阅了该主题的消费者都可以接收到消息。
消息:包含应用程序需要交换的信息,消息可以是文本、对象、字节数组等。
3. JMS 消息类型
JMS 定义了几种消息类型,主要包括:
TextMessage:包含文本数据的消息。
ObjectMessage:可以包含 Java 对象的消息。
BytesMessage:包含字节流数据的消息。
MapMessage:包含键值对的消息。
StreamMessage:包含可读写的流数据的消息。
4. JMS 消息模型
JMS 支持两种主要的消息传递模型:
点对点(Point-to-Point)模型:
使用队列作为目的地。
每条消息仅被一个消费者处理。
提供了可靠的消息传递机制,可以确保消息不会丢失。
发布-订阅(Publish-Subscribe)模型:
使用主题作为目的地。
消息可以被多个消费者接收。
适用于需要广播消息的场景。
5. JMS 的优点
解耦:生产者和消费者可以独立开发和部署,减少了系统之间的依赖关系。
异步处理:允许消息在后台处理,提高了应用程序的响应能力。
可扩展性:支持高并发和高负载的消息处理。
可靠性:通过持久性消息机制,确保消息在网络故障或系统崩溃时不会丢失。
6. JMS 使用流程
创建连接:生产者和消费者都需要创建到消息服务提供者的连接。
创建会话:通过连接创建会话,负责发送和接收消息。
创建目的地:根据需要创建队列或主题。
创建生产者和消费者:分别用于发送和接收消息。
发送和接收消息:通过生产者发送消息,消费者接收并处理消息。
关闭资源:完成操作后,关闭会话和连接。
7. 常见的 JMS 实现
一些流行的 JMS 提供者包括:
Apache ActiveMQ:开源的消息中间件,广泛使用,支持多种协议。
RabbitMQ:支持多种消息协议,尤其适合微服务架构。
IBM MQ:企业级消息中间件,提供高可用性和可靠性。
Apache Kafka:高吞吐量的分布式消息系统,适合大数据场景。
8. 总结
JMS 提供了一种强大的消息传递机制,使得 Java 应用程序之间能够高效、可靠地进行通信。通过理解 JMS 的架构和组件,开发者可以更好地利用这一技术构建高效的企业应用。

JMS和AMQP的区别

JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol)是两种用于消息传递的技术,但它们在设计理念和使用场景上有一些区别:
协议与API:
JMS 是Java平台上的一种API,主要用于在Java应用程序之间发送和接收消息。它并不是一个协议,而是一个接口规范。
AMQP 是一个开放的消息传递协议,旨在支持各种编程语言和平台之间的消息交换。它定义了一种标准的消息格式和消息队列的行为。
语言支持:
JMS 主要支持Java语言,虽然有一些第三方实现可以在其他语言中使用,但核心是为Java设计的。
AMQP 则支持多种编程语言,如Python、C#、Ruby等,适用于多种平台。
消息传递模式:
JMS 提供了点对点和发布/订阅两种消息传递模型,允许开发者根据需求选择合适的模式。
AMQP 也支持类似的模式,但其设计更加灵活,支持复杂的路由和消息传递策略。
实现与应用:
JMS 通常与Java EE应用服务器(如Apache ActiveMQ)紧密集成,适合企业应用。
AMQP 被广泛应用于各种消息中间件(如RabbitMQ),并且可以在分布式系统中有效使用。
事务支持:
JMS 允许在消息发送和接收之间进行事务处理,以确保消息的可靠性。
AMQP 也支持事务,但其实现可能更加复杂,支持更高层次的消息确认机制。
总的来说,JMS更适合Java环境,而AMQP则提供了更广泛的跨语言支持和灵活性,选择哪种技术取决于具体的应用需求和环境。

Spring集成Java Message Service (JMS)

下面是一个使用Spring集成Java Message Service (JMS) 的基本示例,展示如何配置和使用JMS来发送和接收消息。我们将使用Apache ActiveMQ作为消息中间件。

  1. Maven依赖
    首先,确保在你的pom.xml中添加以下依赖:
<dependencies>
    <!-- Spring JMS -->
    <dependency>
        <groupId>org.springframework</groupId>

        <artifactId>spring-jms</artifactId>

        <version>5.3.20</version>

    </dependency>

    <!-- ActiveMQ -->
    <dependency>
        <groupId>org.apache.activemq</groupId>

        <artifactId>activemq-spring-boot-starter</artifactId>

        <version>2.6.0</version>

    </dependency>

    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter</artifactId>

    </dependency>

</dependencies>
  1. Spring Boot配置
    创建一个配置类来设置JMS连接工厂和模板:
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.core.JmsTemplate;

@Configuration
@EnableJms
public class JmsConfig {

    @Bean
    public ActiveMQConnectionFactory connectionFactory() {
        return new ActiveMQConnectionFactory("tcp://localhost:61616");
    }

    @Bean
    public JmsTemplate jmsTemplate(ActiveMQConnectionFactory connectionFactory) {
        return new JmsTemplate(connectionFactory);
    }
}
  1. 发送消息的服务
    创建一个服务类来发送消息:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

@Service
public class MessageSender {

    @Autowired
    private JmsTemplate jmsTemplate;

    public void sendMessage(String queue, String message) {
        jmsTemplate.convertAndSend(queue, message);
    }
}
  1. 接收消息的监听器
    创建一个监听器来接收消息:
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class MessageListener {

    @JmsListener(destination = "myQueue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}
5. 启动类
创建一个启动类来运行Spring Boot应用:
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class JmsApplication {

    public static void main(String[] args) {
        SpringApplication.run(JmsApplication.class, args);
    }

    @Bean
    CommandLineRunner run(MessageSender messageSender) {
        return args -> {
            messageSender.sendMessage("myQueue", "Hello, JMS!");
        };
    }
}
  1. 运行程序
    确保你的ActiveMQ服务器正在运行,然后启动Spring Boot应用。你应该会看到控制台输出:
    Received message: Hello, JMS!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值