RabbitMQ的安装和简单概述

一、安装RabbitMQ

1、概述: RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,一般地,需要先安装部署Erlang环境再安装RabbitMQ环境。但在docker中,Erlang环境已经被docker自动安装,我们只需要简单几步操作即可完成RabbitMQ环境地安装+Web页面管理。消息队列是异步处理,降低耦合度,流量削峰。

2、开放端口:请在服务器上开放相应地安全组(端口):15672(页面管理 端口)、5672(client端通信口)25672(server间内部通信口)、61613、1883

#开放指定端口号命令
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
--zone #作用域
--add-port=1935/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

3、先安装docker(移步docker安装教程),然后执行以下命令,docker容器便会自动拉取RabbitMQ镜像并创建容器。

docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

安装完成后,输入http://ip:15672/,则可以看到RabbitMQ管理界面:

image-20221026154555827

二、RabbitMQ的五种工作模式

1、消息推送到接收的流程图:

JCccc-RabbitMq

1、简单队列:一个生产者对应一个消费者。

2、work模式:一个生产者对应多个消费者,但是一条消息只能有一个消费者获得消息,轮询分发就是将消息队列中的消息,依次发送给所有消费者。一个消息只能被一个消费者获取。

3、发布/订阅模式(fanoutExchange):一个消费者将消息首先发送到交换机,交换机绑定到多个队列,然后被监听该队列的消费者所接收消费。如果没有队列绑定交换机,则消息丢失。

4、路由模式(DirectExchange):生产者将消息发送到direct交换机,在绑定队列和交换机的时候有一个路由key,生产者发送的消息会指定一个路由key,那么消息只会发送到相应key相同的队列中,接着监听该队列的消费者消费消息。也就是让消费者有选择性的接收消息。

5、主题模式(TopicExchange):路由模式是根据routingkey进行完整的匹配,而这里的通配符模式就是模糊匹配。与路由模式类似,但主题模式是一种模糊的匹配方式。

五种模式可以分为三类:

生产者,消息队列,一个消费者。

生产者,消息队列,多个消费者。

生产者,交换机,多个消息对列,多个消费者。

着中介绍最常用的Fanout交换机和Direct交换机

Fanout Exchange:扇形交换机。

不处理路由键,只需要简单的将队列绑定到交换机上。

发送到交换机的消息都会被转发到该交换机绑定的所有队列上

Fanout交换机转发消息是最快的。

Fanout Exchange交换机可以简单的理解为广播站。

上面几句话,在生活中有个很常见的示例:在大学中,我们知道每天都会有广播站放出美妙的音乐。广播站是面向全校所有师生的,所有它的消息转发的是最快的。

Direct exchange:直连交换机。

定义:根据路由键(routingkey)需要完全匹配上才可以。会把消息路由到那些bingding key与routing key完全匹配的队列中。Rabbit mq默认的路由就是这种。

单个绑定示意图:

img

说明:

我们可以看到有三个routingkey:orange、black、green.如果生产者P发送消息的key是orange(需要完全匹配的)那么将会被路由的Q1这个消费者上。如果发送的是black或者是green的时候,将会被路由到Q2上面。

多个绑定示意图:

img

说明:

将相同的key绑定在不同的队列中。当生产者P发送消息key是black的时候,Q1和Q2都会被接收到

posted @   晴天阴天下雨天  阅读(180)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示