RabbitMQ 的七种消息传递形式

  1. 队列(Queue):Exchange 将消息分发到指定的 Queue,Queue 和消费者进行交互。

  2. 路由(Routes):交换机转发消息到队列的规则。

2. 准备工作


大家知道,RabbitMQ 是 AMQP 阵营里的产品,Spring Boot 为 AMQP 提供了自动化配置依赖 spring-boot-starter-amqp,因此首先创建 Spring Boot 项目并添加该依赖,如下:

项目创建成功后,在 application.properties 中配置 RabbitMQ 的基本连接信息,如下:

spring.rabbitmq.host=localhost

spring.rabbitmq.username=guest

spring.rabbitmq.password=guest

spring.rabbitmq.port=5672

接下来进行 RabbitMQ 配置,在 RabbitMQ 中,所有的消息生产者提交的消息都会交由 Exchange 进行再分配,Exchange 会根据不同的策略将消息分发到不同的 Queue 中。

RabbitMQ 官网介绍了如下几种消息分发的形式:

这里给出了七种,其中第七种是消息确认,消息确认这块松哥之前发过相关的文章,传送门:

所以这里我主要和大家介绍前六种消息收发方式。

3. 消息收发


3.1 Hello World

咦?这个咋没有交换机?这个其实是默认的交换机,我们需要提供一个生产者一个队列以及一个消费者。消息传播图如下:

来看看代码实现:

先来看看队列的定义:

@Configuration

public class HelloWorldConfig {

public static final String HELLO_WORLD_QUEUE_NAME = “hello_world_queue”;

@Bean

Queue queue1() {

return new Queue(HELLO_WORLD_QUEUE_NAME);

}

}

再来看看消息消费者的定义:

@Component

public class HelloWorldConsumer {

@RabbitListener(queues = HelloWorldConfig.HELLO_WORLD_QUEUE_NAME)

public void receive(String msg) {

System.out.println("msg = " + msg);

}

}

消息发送:

@SpringBootTest

class RabbitmqdemoApplicationTests {

@Autowired

RabbitTemplate rabbitTemplate;

@Test

void contextLoads() {

rabbitTemplate.convertAndSend(HelloWorldConfig.HELLO_WORLD_QUEUE_NAME, “hello”);

}

}

这个时候使用的其实是默认的直连交换机(DirectExchange),DirectExchange 的路由策略是将消息队列绑定到一个 DirectExchange 上,当一条消息到达 DirectExchange 时会被转发到与该条消息 routing key 相同的 Queue 上,例如消息队列名为 “hello-queue”,则 routingkey 为 “hello-queue” 的消息会被该消息队列接收。

3.2 Work queues

这种情况是这样的:

一个生产者,一个默认的交换机(DirectExchange),一个队列,两个消费者,如下图:

一个队列对应了多个消费者,默认情况下,由队列对消息进行平均分配,消息会被分到不同的消费者手中。消费者可以配置各自的并发能力,进而提高消息的消费能力,也可以配置手动 ack,来决定是

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值