编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

RabbitMQ之简介&六种工作模式介绍

wxchong 2024-09-16 07:02:20 开源技术 9 ℃ 0 评论

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:后续会对这六种工作模式进行示例总结~,感谢大家的关注~[舔屏]

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表