大话RabbitMQ 基础入门

时间:2023-03-09 15:34:34
大话RabbitMQ  基础入门

----------写在前面----------

近些年微服务越来越火,让我也忍不住想去一窥微服务究竟,讲到微服务,就离不开分布式,而分布式,也离不开消息队列,在消息队列中,RabbitMQ可以说是比较具有代表性的一款。

这里是一篇介绍消息队列以及各种消息队列产品对比的文章,讲得很好,有兴趣的可以看一看。

https://cloud.tencent.com/developer/article/1006035

在讲RabbitMQ之前,首先需要在电脑上安装和配置RabbitMQ,网络上已经有很多这类文章,如果懒得去搜索,可以看看这篇介绍如何安装配置RabbitMQ的文章。

https://blog.csdn.net/weixin_39735923/article/details/79288578

其中,在安装RabbitMQ的过程中,遇到了一个坑,在启用RabbltMQ的管理界面执行

rabbitmq-plugins enable rabbitmq_management

命令时,出现了以下这样的报错

大话RabbitMQ  基础入门

可以在该指令前加上 .\ 即

.\rabbitmq-plugins enable rabbitmq_management

祝安装顺利 !!

-------正文------

基本概念

下面是在.Net中使用RabbitMQ要明白的一些名词概念。

  • Producer:消息发送方
  • ------------------------------
  • Consumer:消息接收方
  • --------------------------------
  • Connection :程序与RabbitMQ之间的连接,类似连接数据库所用的DbConnection。
  • ------------------------------------------------------------------------------------------
  • Channel :每个Connection可以有多个Channel,每个Chanel代表一次会话任务。
  • ------------------------------------------------------------------------
  • Exchange :RabbitMQ传递模型的核心思想是生产者和消费者不直接发生关系,即生产者并不知道消费者的存在,他们之间就是通过Exchange进行消息的分发。
  • -------------------------------------------------------------------------------------------------------------------------------------------------------------
  • Routing Key:路由关键字是Exchange把消息分发给Queue的规则(消息能否发给Queue的一个判断条件)。
  • --------------------------------------------------------------------------------------------------
  • Queue:消息队列,Exchange把消息分发给Queue,消费者再从Queue中取数据。
  • ------------------------------------------------------------------------------
  • Binding:Binding使得Exchange和Queue之间发生联系。

综上所诉,他们之间的关系可以用我下面的 丑图 表示。

大话RabbitMQ  基础入门

在图中,没有吧Routing key画出。Producer每一次发送消息,除了发出消息本身,还会随着消息带上一个routingKey,而且每一次将Exchange和Queue绑定,大体需要三个参数,

string queueName, string exchangeName, string routingKey

其中也有一个routingKey,但此RoutingKey非彼Routingkey。

大白话

对这个过程,我们可以理解为国家给灾区发送救灾物资,国家给当地*划拨物资的时候,会规定,谁才能拿到这批物资,如(房子倒了的.家里有人受伤了的.家庭经济困难的)。

而当地*在分配这批物资之前,为了方便物资的分配,会给每个家庭贴上一个标签,如

家庭A 经济困难

家庭B 房子倒了.经济困难

家庭C 家庭富有.房子倒了

家庭D 房子倒了的.家里有人受伤了的.家庭经济困难的

所以,发送消息时候的routingKey就是国家规定的那批物质分配规则。

而Exchange和Queue绑定时的RoutingKey可以理解为当地*给每个家庭贴上的一个标签。

Exchange(交换机)转发消息的规则也有很多种:direct, topic, headers(不常用) 和 fanout,我们称之为交换类型。

我们可以把Exchange理解为分配这批物质的*,现在国家规定了宏观的分配方向(发送消息时的routingKey),每个家庭也有了家庭情况的标签(绑定Exchange时的routingKey),但是这个物资具体怎么分,还是当地*说了算。

Direct 严格按照国家规定来,只有房子倒了的,家里有人受伤了的而且家庭经济困难的才能分到救灾物资。    家庭D能分到

Fanout 只要是灾区的居民都能分到, 不管家庭情况如何。 家庭A\B\C\D都能分到

Topic 主题匹配: 只要家庭情况在国家规定分配规则内的,都能分到物资,但是家庭C分不到,因为他家太有钱了,这个条件不在国家的分配规则里。家庭A\B\D能分到

所以,我们在声明一个Exchange(交换机)的同时,还要指定该交换机的类型,即(当地*怎么来分救灾物资)

其实,用这个例子,我是想说,生产者和消费者之间,就像国家与难民之间一样,国家只知道,我要帮助难民,但是难民有谁,物资能不能分到难民手里,还得当地*说了算,你就说我这个例子恰不恰当吧!哈哈