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

echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075) 交流学习。


上文我们实现了一个简单的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xlecho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值