RabbitMQ 是一个开源的消息代理软件

简介: RabbitMQ 是一个开源的消息代理软件

RabbitMQ 是一个开源的消息代理软件,用于实现高效的消息队列系统。它支持多种消息传递协议,包括 AMQP(Advanced Message Queuing Protocol),并且易于在分布式系统中部署和扩展。在 RabbitMQ 中,消息的传递通过交换机(Exchange)来实现。

 

### RabbitMQ 的核心概念

 

1. **消息队列模型**:

  - **Producer**:生产者,负责发布消息到 RabbitMQ 中的交换机。

  - **Exchange**:交换机,接收来自生产者的消息,并根据规则将消息路由到一个或多个队列。

  - **Queue**:队列,存储消息直到消费者准备好接收它们。

  - **Consumer**:消费者,从队列中获取消息并进行处理。

 

2. **Exchange 类型**:

  RabbitMQ 提供了不同类型的交换机,每种类型都有不同的路由策略,适用于不同的消息传递场景:

  - **Direct Exchange**:直接交换机,将消息路由到与 Routing Key 完全匹配的队列中。

  - **Fanout Exchange**:扇出交换机,将消息广播到所有绑定到交换机的队列中。

  - **Topic Exchange**:主题交换机,根据通配符匹配将消息路由到一个或多个队列中。

  - **Headers Exchange**:头交换机,使用消息头中的键值对进行匹配,而不是 Routing Key。

 

### RabbitMQ 的配置

 

在 Spring Boot 中使用 RabbitMQ 需要进行一些配置,包括连接 RabbitMQ 服务器、声明交换机、队列和绑定关系等。

 

#### 1. 添加 RabbitMQ 依赖

 

首先,在 `pom.xml` 文件中添加 RabbitMQ 的 Spring Boot Starter 依赖:

```xml
    org.springframework.boot
    spring-boot-starter-amqp
```

#### 2. 配置文件设置

 

在 `application.properties` 或 `application.yml` 中添加 RabbitMQ 的连接配置:

```properties
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
```

#### 3. 创建消息生产者

 

编写一个发送消息的生产者类:

 

```java
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
@Component
public class MessageProducer {
 
    private RabbitTemplate rabbitTemplate;
 
    @Autowired
    public MessageProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }
 
    public void sendMessage(String exchangeName, String routingKey, String message) {
        rabbitTemplate.convertAndSend(exchangeName, routingKey, message);
        System.out.println("Message sent: " + message);
    }
}
```

#### 4. 创建消息消费者

 

编写一个接收消息的消费者类:

```java
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
 
@Component
public class MessageConsumer {
 
    @RabbitListener(queues = "my-queue")
    public void receiveMessage(String message) {
        System.out.println("Message received: " + message);
    }
}
```

#### 5. 声明交换机和队列

 

在应用启动时,可以使用 `RabbitAdmin` 或者在配置类中声明 `@Bean` 方法来声明交换机和队列,以及它们之间的绑定关系。

 

```java
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class RabbitMQConfig {
 
    public static final String EXCHANGE_NAME = "my-exchange";
    public static final String QUEUE_NAME = "my-queue";
    public static final String ROUTING_KEY = "my-routing-key";
 
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange(EXCHANGE_NAME);
    }
 
    @Bean
    public Queue queue() {
        return new Queue(QUEUE_NAME);
    }
 
    @Bean
    public Binding binding(Queue queue, DirectExchange directExchange) {
        return BindingBuilder.bind(queue).to(directExchange).with(ROUTING_KEY);
    }
}
```

### 总结

 

通过以上步骤,我们可以在 Spring Boot 应用中配置和使用 RabbitMQ,实现消息的生产和消费。关键是理解 RabbitMQ 的核心概念,包括交换机类型及其路由策略,以及如何通过配置文件和代码来设置和管理 RabbitMQ 的连接和消息传递逻辑。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
56 1
|
3月前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
153 13
|
2月前
|
消息中间件 Shell RocketMQ
就软件研发问题之RocketMQ中ACL授权管理的问题如何解决
就软件研发问题之RocketMQ中ACL授权管理的问题如何解决
|
2月前
|
消息中间件 存储 Shell
就软件研发问题之在RocketMQ中通过命令行创建用户的问题如何解决
就软件研发问题之在RocketMQ中通过命令行创建用户的问题如何解决
|
2月前
|
消息中间件 监控 数据安全/隐私保护
就软件研发问题之在RocketMQ的服务端开启认证功能的问题如何解决
就软件研发问题之在RocketMQ的服务端开启认证功能的问题如何解决
|
2月前
|
消息中间件 存储 监控
就软件研发问题之RocketMQ ACL 2.0适应未来持续发展的认证鉴权的问题如何解决
就软件研发问题之RocketMQ ACL 2.0适应未来持续发展的认证鉴权的问题如何解决
|
2月前
|
消息中间件 数据安全/隐私保护 RocketMQ
就软件研发问题之RocketMQ ACL 2.0的认证流程的问题如何解决
就软件研发问题之RocketMQ ACL 2.0的认证流程的问题如何解决
|
2月前
|
消息中间件 运维 安全
就软件研发问题之RocketMQ ACL 2.0中的认证服务的主要目的是什么
就软件研发问题之RocketMQ ACL 2.0中的认证服务的主要目的是什么
|
2月前
|
消息中间件 API 数据安全/隐私保护
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
|
2月前
|
消息中间件 API 数据安全/隐私保护
就软件研发问题之RocketMQ ACL 1.0中的IP白名单存在的问题如何解决
就软件研发问题之RocketMQ ACL 1.0中的IP白名单存在的问题如何解决