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
青欢
+关注
目录
打赏
0
2
2
0
42
分享
相关文章
商业版vs开源版:一图看懂云消息队列 RocketMQ 版核心优势
自建开源 RocketMQ 集群,为保证业务稳定性,往往需要按照业务请求的峰值去配置集群资源。云消息队列 RocketMQ 版 Serverless 实例通过资源快速伸缩,实现资源使用量与实际业务负载贴近,并按实际使用量计费,有效降低企业的运维压力和使用成本。
231 16
恭喜 Apache RocketMQ、Apache Seata 荣获 2024 开源创新榜单“年度开源项目”
近日,以“新纪天工、开物焕彩——致敬开源的力量”为活动主题的“重大科技成就发布会(首场)”在国家科技传播中心成功举办,并隆重揭晓了 2024 开源创新榜单,旨在致敬中国开源力量,传播推广开源科技成就,营造中国开源创新生态。2024 年开源创新榜单由中国科协科学技术传播中心、中国计算机学会、中国通信学会、中国科学院软件研究所共同主办,中国开发者社区承办,以王怀民院士为首组建评审委员会,进行研讨评审,面向中国开源行业领域,遴选具有创新性、贡献度和影响力的开源项目、社区、应用场景与开源事件。在评审出的 10 个年度开源项目中,Apache RocketMQ、Apache Seata 成功入选。
一图看懂云消息队列 RabbitMQ 版对比开源优势
一张图带您快速了解云消息队列 RabbitMQ 版对比开源版本的显著优势。
FreeMQTT:一款Python语言实现的开源MQTT Server
FreeMQTT 是一款用 Python 语言并基于 Tornado 开发的开源 MQTT 服务器,支持 MQTT3.1.1 和 MQTT5.0 协议,提供多租户安全隔离、高效 Topic 匹配算法及实时上下线通知等功能,适用于 IoT 场景。快速启动仅需克隆仓库、安装依赖并运行服务。
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
154 1
就软件研发问题之RocketMQ中ACL授权管理的问题如何解决
就软件研发问题之RocketMQ中ACL授权管理的问题如何解决
就软件研发问题之在RocketMQ中通过命令行创建用户的问题如何解决
就软件研发问题之在RocketMQ中通过命令行创建用户的问题如何解决
就软件研发问题之在RocketMQ的服务端开启认证功能的问题如何解决
就软件研发问题之在RocketMQ的服务端开启认证功能的问题如何解决
就软件研发问题之RocketMQ ACL 2.0适应未来持续发展的认证鉴权的问题如何解决
就软件研发问题之RocketMQ ACL 2.0适应未来持续发展的认证鉴权的问题如何解决
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等