网站首页 > 开源技术 正文
1.概念
RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据;
核心思想:生产者永远不会将任何消息直接发送到队列,生产者不知道消息是否被传递到任何队列;
2.AMQP协议
2.1 定义
是具有现代特征的二进制协议.是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计;
2.2 核心概念
- 1.Server:又称Broker,接受客户端的连接,实现AMQP实体服务;
- 2.Connection:连接,应用程序与Broker的网络连接;
- 3.Channel:网络信道,几乎所有的操作都在Channel在进行,Channel是进行消息的读写的通道.客户端可建立多个Channel,每个Channel代表一个会话任务;
- 4.Message:消息:服务器与应用程序之间传送的数据,由Properties和Body组成.Properties可以对消息进行修饰,比如消息的优先级,延迟等高级特性;Body则就是消息体内容;
- 5.Virtual host:虚拟地址:用于进行逻辑分离,最上层的消息路由.一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue;
- 6.Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列;
- 7.Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key;
- 8.Routing key:一个路由规则,虚拟机可以用它来确定如何路由一个特定消息;
- 9.Queue:也称Message Queue,消息队列,保存消息并将它们转发给消费者;
3.核心概念
(1)生产者:产生数据发送消息的程序是生产者;
(2)交换机:
- 一方面它接收来自生产者的消息,另一方面它将消息推送到队列中;
- 交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定;
(3)队列
- 队列是 RabbitMQ 内部使用的一种数据结构;
- 队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区;
(4)消费者:消费者大多时候是一个等待接收消息的程序;
值得注意的是:工作中经常会遇到很多场景需要定义生产者,生产者不应该处理复杂的业务逻辑,应由消费者处理不同的复杂逻辑,进行解耦;
4.名词介绍
Broker:
- 接收和分发消息的应用,RabbitMQ Server 就是 Message Broker;
Virtual host:
- 把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念;
- 当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等;
Connection:
- publisher/consumer 和 broker 之间的 TCP 连接;
Channel:
- 如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立TCPConnection 的开销将是巨大的,效率也较低;
- Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的;
- Channel 作为轻量级的Connection 极大减少了操作系统建立 TCP connection 的开销;
Exchange:
- message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去;
- 常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast);
Queue:
- 消息最终被送到这里等待 consumer 取走;
Binding:
- exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据;
5.安装
(1)官网地址下载:https://www.rabbitmq.com/download.html
(2)文件上传:
上传到/usr/local/software 目录下(如果没有 software 需要自己创建)
(3)安装文件:
rpm -ivh erlang-21.3-1.el7.x86_64.rpm yum install socat -y rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
(4)常用命令:
- 添加开机启动 RabbitMQ 服务:chkconfig rabbitmq-server on
- 启动服务:/sbin/service rabbitmq-server start
- 查看服务状态:/sbin/service rabbitmq-server status
- 停止服务:/sbin/service rabbitmq-server stop
- 开启 web 管理插件:rabbitmq-plugins enable rabbitmq_management
用默认账号密码(guest)访问地址 http:#//:15672/ 出现权限问题:
(5)添加一个新的用户
- 创建账号:rabbitmqctl add_user admin 123
- 设置用户角色:rabbitmqctl set_user_tags admin administrator
- 设置用户权限:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read> rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" #用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
(6)admin 用户登录
(7)重置命令
- 关闭应用的命令:rabbitmqctl stop_app
- 清除的命令:rabbitmqctl reset
- 重新启动命令:rabbitmqctl start_app
6.六种工作模式
(1)简单模式
只有一个消费者;
(2)工作模式
多个消费者从同一个队列接收数据;
1.负载均衡,轮训分发消息;
2.合理分发消息
- Qos=1
- 手动ack
3.消息持久化
(3)发布/订阅模式
- 把消息群发送给所有的消费者,同一条消息所有消费者都可以收到;
- fanout类型的交换机;
(4)路由模式
- 通过关键词来匹配,来确定发送到哪个队列中;
- direct类型的交换机,向direct发送数据,并携带路由键;
(5)主题模式
- 通过特殊的关键词来匹配,来确定发送到哪个队列中;
- topic类型的交换机;
(6)RPC异步调用模式
Rpc核心思想是将不同进程之间的通讯抽象为函数调用,基本的过程是调用端通过将参数序列化到流中并发送给服务端,服务端从流中反序列化出参数并完成实际的处理,然后将结果序列化后返回给调用端;
框架实现:通过request id来关联请求和响应函数之间的上下文的;
- 1.客户端定义RPCClient类,发送RPC请求,并等待响应结果;
- 2.回调队列,在发送请求时,发送一个回调队列;
- 3.关联id,为每一个请求设置唯一的id值,在回调队列消息中匹配请求和响应;
ps:后续会对这六种工作模式进行示例总结~,感谢大家的关注~[舔屏]
猜你喜欢
- 2024-09-16 K8s新增Node(k8s新增node节点)
- 2024-09-16 Yocto Project Quick Build 翻译(totalview翻译)
- 2024-09-16 如何在Wordpress中加密保护网站视频和网页内容?
- 2024-09-16 使用socat反向Shell多台机器(nc 反向shell)
- 2024-09-16 RabbitMQ消息服务用户手册(rabbitmq消息数据类型)
- 2024-09-16 使用socat来监视Docker API(docker容器监控工具)
- 2024-09-16 hideNsneak:一款功能强大的渗透测试基础设施管理工具
- 2024-09-16 ANDRAX:最新的Android智能手机上的渗透测试平台
- 2024-09-16 SOCAT(NC加强版)(socat nc)
- 2024-09-16 Kali Linux渗透工具【八】:系统命令注入漏洞工具 – Commix使用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)