5、RabbitMQ教程-推送到消费都经历了什么

简介: 5、RabbitMQ教程-推送到消费都经历了什么
上文我们实现了一个简单的hello world的案例,我们看到了推送和消费的整个过程。在代码中,有很多的设置我们没有讲明白,这些设置是做什么的呢?又觉得了什么?本文会详细讲明白

消息传递的简单模型

在我们上一个案例中,我们可以了解到如下的一个大概的消息传递模型。我们可以看到消息的传递,其实就是一个端发送到了另一个端口,很简单。
在这里插入图片描述

但是我们消息中间件的消息传递这么简单吗?肯定不是的,假若我们有多个生产端,同时又有多个消费端我们怎么保证我们的生产者生产的消息,干好是某个消费者所需要的消息呢?

所以我们看到RabbitMQ提供的消息模型是这样的
在这里插入图片描述

如果消息中间件的模型是第一个图,我们的代码肯定不需要那么多的设置,直接推送给某个地址一个消息节课,但是如果是第二个图那我们的代码可能就要做一些设置来选择和适应这样的模型了

模型图流程在代码中的体现

我可以在模型图中看到几个概念

  • 生产者 Product
ProductTest.class
  • 消费者 Consumer
ConsumerTest.class
  • 队列 Queue
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);

这几个符合我们的第一个图的理念,但是我们的第二个图中的Exchange是啥呢?

交换器、路由器Exchange

生产者产生消息,然后由交换器、路由器Exchange推送到对应的队列里面。其实这个过程中还有一个RoutingKey
在这里插入图片描述

RoutingKey:路由键。生产者将消息发给交换器的时候,一般会指定一个RoutingKey。用来指定这个消息的路由规则,而这个RoutingKey需要与交换器类型和绑定键(BindingKey)合使用才能最终生效。

Binding: 绑定RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一 绑定键BindingKey,这样RabbitMQ 就知 何正确将消息路由队列了

在我们代码中,可以明显的看到Exchange和RoutingKey已经BindingKey这样的体现

// 创建一个 type="direct" 、持久化的、非自动删除的交换器
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);
// 将交换器与队列通过路由键绑定
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);

在这里插入图片描述

总结

从这样一个流程我们不难看出,一个消息的生产经过了一系列的设定,然后根据设定才会有效的被对应的consumer
消息在整个流程里,经历了从生产到-> Exchange 再到-> Queue 最后才会到-> consumer

相关实践学习
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
目录
相关文章
|
6月前
|
消息中间件 数据可视化 Java
RocketMQ保姆级教程
大家好,我是三友~~ 上周花了一点时间从头到尾、从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家。
RocketMQ保姆级教程
|
12天前
|
消息中间件 存储 数据安全/隐私保护
RabbitMQ使用教程
RabbitMQ使用教程
18 2
|
5月前
|
消息中间件 存储
【RabbitMQ教程】第四章 —— RabbitMQ - 交换机(上)
【RabbitMQ教程】第四章 —— RabbitMQ - 交换机
|
2月前
|
消息中间件 Linux 开发工具
Linux系统安装RabbitMQ详细教程
Linux系统安装RabbitMQ详细教程
29 0
|
2月前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
|
5月前
|
消息中间件 数据安全/隐私保护 Docker
百度搜索:蓝易云【Docker安装RabbitMQ docker安装RabbitMQ完整详细教程】
通过按照以上步骤,你应该能够成功在Docker上安装并运行RabbitMQ。请记住,具体步骤可能会因Docker版本和操作系统而有所不同。如果遇到任何问题,可以查阅官方文档或社区寻求更多帮助。
125 0
|
5月前
|
消息中间件 JSON 运维
spring boot RabbitMq基础教程(三)
spring boot RabbitMq基础教程
75 1
|
5月前
|
消息中间件 存储 运维
spring boot RabbitMq基础教程(二)
spring boot RabbitMq基础教程
44 0
|
5月前
|
消息中间件 存储 Java
spring boot RabbitMq基础教程(一)
spring boot RabbitMq基础教程
43 0
|
5月前
|
消息中间件 存储 NoSQL
【RabbitMQ教程】第八章 —— RabbitMQ - 幂等性、优先级、惰性
【RabbitMQ教程】第八章 —— RabbitMQ - 幂等性、优先级、惰性