教程相关代码:RabbitMQ入门教程——GitHub
1.为什么要使用消息中间件?
个人理解:主要是为了 解耦合,负载均衡,异步处理等,是分布式系统的重要组件。生产者只需要生产出消息,将消息交给消息中间件即可,这样生产者就不用去执行发送消息等待回应这些操作,大大提高了生产者的效率,这样就实现了高性能。
2.RabbitMQ结构
如图:
相关概念:
(生产者和消费者这里就不赘述了)
交换机(exchange):我认为“分发器”这个名字更适合,交换机负责将生产者传来的消息“分发”到队列中存储,这里的分发可以是默认分发,无规则分发,有规则分发,在下面我们会详细讲解这些分发工作模式。
队列(queue):用于存储消息,消息到达队列后能在消费者需要的时候转发给消费者。
routingkey:交换机的“分发规则”,就像正则表达式一样。传来的消息中有routingkey就像钥匙一样,在交换机中为每个队列设置binding key就像锁一样,这样就可以控制消息传递的方向。
连接(connection):生产者和消费者与消息中间件之间的TCP连接。
通道(channels):通道是在连接的内部,数据是在通道中流动的。
注:通道是在连接的内部,我在一开始学习的时候一直没搞清楚,配个图更直观。
3.RabbitMQ安装与启动
这里我们只介绍windows环境下的安装
相关下载:https://pan.baidu.com/s/1KpojYjYcqza8imyIp6Egig 提取码:dtec
复制这段内容后打开百度网盘手机App,操作更方便哦
-
下载并安装Eralng,这个是RabbitMQ的运行环境,一路next即可。
-
下载并安装RabbitMQ,一路next。
安装成功后会自动创建RabbitMQ服务并且启动。
也可以在开始菜单中找到相关信息
RabbitMQ Service-install :安装服务
RabbitMQ Service-remove 删除服务
RabbitMQ Service-start 启动
RabbitMQ Service-stop 启动
如果没有开始菜单则进入安装目录下sbin目录手动启动 -
安装管理界面(插件),为了能在浏览器中管理
进入rabbitMQ安装目录的sbin目录,输入命令或在开始菜单中点击“RabbitMQ Command Prompt”rabbitmq-plugins.bat enable rabbitmq_management
-
打开浏览器,地址栏输入http://127.0.0.1:15672 ,即可看到管理界面的登陆页
初始账号和密码:guest/guest
4.工作模式
4.1 直接模式(Direct)
我们需要将消息发送给唯一消费者时用这种模式
- 直接模式是不需要配置交换机的,使用系统默认的交换机,默认交换机什么都不干,只是“走个形式”
- 多个消费者可以监听同一个队列,采用轮询的方式将消息平均分发给消费者,也就是负载均衡
- 消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。
详细教程:RabbitMQ工作模式之直接模式
4.2 分裂模式(Fanout)
当我们需要将消息一次发给多个队列时,需要使用这种模式。
- 需要提前将交换机和队列进行绑定
- 路由器会将消息发送到所有绑定在该交换机上的队列
详细教程:RabbitMQ工作模式之分裂模式
4.3 主题模式(Topic)
如果需要将消息发送到指定的队列(交换机上绑定了许多队列),那么你就需要使用该模式。该模式其实是分裂模式的加强版,分裂模式就像各个家的门没有上锁,主题模式就是把门上了锁,需要相应的钥匙才能打开。
- 在该模式下,每个绑定在交换机上的队列都有自己的bindingkey,这个就是队列的锁
- 在该模式下,消息都带有自己的routingkey,这个就是消息的钥匙
- 一个routingkey可以打开多个bindingkey
- 模糊匹配,在bindingkey中,符号 # 匹配一个或多个词,符号 * 匹配不多不少一个词。因此,如果routingkey为queue1.abc会匹配到队列1,如果routingkey为queue1.queue2.a会匹配到队列1和队列2
- 精确匹配,如果你在bindingkey中不使用#*符号,那么就必须bindingkey=routingkey才能匹配上
详细教程:RabbitMQ工作模式之主题模式
下一章节:RabbitMQ工作模式之直接模式
相关链接:
RabbitMQ工作模式之直接模式
RabbitMQ工作模式之分裂模式
RabbitMQ工作模式之主题模式
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!