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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
9天前
|
消息中间件
RabbitMQ是一个功能强大的开源消息代理软件,用于处理消息队列
RabbitMQ是一个功能强大的开源消息代理软件,用于处理消息队列
13 0
|
18天前
|
消息中间件 Serverless Windows
消息队列 MQ产品使用合集之MQTT协议是否可以应用于社交软件的系统通知场景
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
|
1月前
|
Java Maven
【开源视频联动物联网平台】vertx写一个mqtt客户端
【开源视频联动物联网平台】vertx写一个mqtt客户端
76 1
|
1月前
【开源视频联动物联网平台】vertx写一个mqtt服务端
【开源视频联动物联网平台】vertx写一个mqtt服务端
45 1
|
1月前
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
325 2
|
1月前
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
241 3
|
7月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
493 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
7月前
|
传感器 JavaScript 前端开发
如何为 Mosquitto MQTT 代理启用 WebSocket?
如何为 Mosquitto MQTT 代理启用 WebSocket?
238 2
如何为 Mosquitto MQTT 代理启用 WebSocket?
|
7月前
|
存储 传感器 物联网
MQTT 客户端和代理连接如何工作?
MQTT 客户端和代理连接如何工作?
180 2
MQTT 客户端和代理连接如何工作?
|
1天前
|
消息中间件 存储 中间件
【主流技术】聊一聊消息队列 RocketMQ 的基本结构与概念
2.6Broker 代理服务器(Broker)是消息中转角色,负责存储消息、转发消息。代理服务器在 RocketMQ 系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。 2.7Pull Consumer 拉取式消费(Pull Consumer)是 Consumer 消费的一种类型,也是默认的类型。下游应用系统通常主动调用 Consumer 的拉消息方法从 Broke r服务器拉消息,即主动权由下游应用控制。一旦获取了批量消息,应用就会启动消费过程。

热门文章

最新文章