----------写在前面----------
近些年微服务越来越火,让我也忍不住想去一窥微服务究竟,讲到微服务,就离不开分布式,而分布式,也离不开消息队列,在消息队列中,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-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之间发生联系。
综上所诉,他们之间的关系可以用我下面的 丑图 表示。
在图中,没有吧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都能分到