• 【RabbitMQ】- RabbitMQ概念及安装


    1.简介

    1.1 消息队列

    消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在

    1.2 rabbitmq

    rabbitmq是一个开源的消息代理和队列服务器,通过普通的协议(Amqp协议)来完成不同应用之间的数据共享
    (消费生产和消费者可以跨语言平台)rabbitmq是通过elang语言来开发的基于amqp协议

    1.3 什么是AMQP协议(Advanced message queue protocol)高级消息队列协议

    • 是一个二进制协议
    • amqp是一个应用层协议的规范(定义了很多规范),可以有很多不同的消息中间件产品(需要遵循该规范)server:是消息队列节点
      virtual host:虚拟注解
      exchange 交换机(消息投递到交换机上)message queue(被消费者监听消费)
      交互机和队列绑定关系:
      在这里插入图片描述

    2.RabbitMQ的概念及原理

    在这里插入图片描述

    2.1. 基础概念

    • Producer:消息生产者,生产端端将消息同交换机路由发送到队列中。
    • Consumer:消息消费者,消费队列中存储的消息
    • Connection:连接,用于生产者、消费者和Server端建立网络连接 TCP连接
    • Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,可以在Connection内部建立多个Channel,每个Channel代表一个会话任务,消息发送、接收都是基于Channel实现;
    • Message :消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容
    • Server: 又称为Broker,接收客户端链接(rabbitmq-server)
    • Virtual Host 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机中可以有若干个Exhange和Queueu,同一个虚拟主机里面不能有相同名字的Exchange
    • Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(不具备消息存储的能力)
    • Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key.
    • Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息
    • Queue:队列:也称为Message Queue-消息队列,保存消息并将它们转发给消费者

    2.2. Exchange

    1. Direct Exchange:所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue,Direct Exchanage可以使用默认的Exchange(default Exchange),默认的Exchange会绑定所有的队列,所以Direct可以直接食用Queue名作为Routing key绑定、或者消费者和生产者的routing key完全匹配;
    2. Topic Exchange:是指发送到Topic Exchange的消息被转发到所有关心的Routing key中指定的topic的Queue上;Exchange将routing key和某个Topic进行模糊匹配,此时队列需要绑定一个topic;
      模糊匹配就是可以使用通配符,"#“可以匹配一个或多个词,”"只匹配一个词;
      如:“log.#” 可以匹配 “log.info.test”;“log.” 只能匹配 “log.info”
    3. Fanout Exchange:不处理路由键,只需要将队列绑定到交换机上,发送到交换机的消息就会被发送到与交换机绑定的Queue上,Fanout转发是最快的;

    3.MQ的几种产品比较

    RabbitMQ、Kafka、RockectMQ、ActiveMQ
    一般业务系统之间通信就是会采用RabbitMQ/RocketMQ,需要复杂的消息路由功能的支撑;
    大数据的实时计算场景才会采用Kafka,Kafka定位主要是日志,设计初衷就是处理日志,可以看作一个日志(消息)系统的一个重要组件,针对性较强;

    特性RabbitMQKafkaRockectMQActiveMQ
    编写语言Erlang编写
    可用性主从分布式分布式主从
    持久化内存、文件分布式磁盘文件内存、文件、数据库
    事务不支持支持支持
    可视化管理友好有web console实现

    4. 工作模式

    官网=》》官网指路

    • Simple Work Queue (简单工作队列):也就是常说的点对点模式,一条消息由一个消费者进行消费。(当有多个消费者时,默认使用轮训机制把消息分配给消费者);

    • 生产者->队列->消费者,没有交换机
      在这里插入图片描述

    • Work Queues (工作队列):在工人之间分配任务(竞争消费者模式)、也叫公平队列,能者多劳的消息队列模型。队列必须接收到来自消费者的 手动ack 才可以继续往消费者发送消息;
      一个队列是可以多个生产者,也可以有多个消费者来竞争消费消息,但是我们仍需保证队列的幂等性,队列存在就不能再创建同名队列
      在这里插入图片描述

    • Publish/Subscribe (发布订阅模式):一条消息被多个消费者消费

    • 生产者->交换机->(多个)队列->消费者
      在这里插入图片描述

    • Routing(路由模式):有选择的接收消息
      在这里插入图片描述

    • Topics (主题模式):通过一定的规则来选择性的接收消息,基于Topic接收消息
      在这里插入图片描述

    • RPC 模式:发布者发布消息,并且通过 RPC 方式等待结果,应该场景少,
      PS:官网最后是 Publisher Confirms 消息确认机制,指的是生产者如何发送可靠的消息

    工作模式与交换机

    消息模式交换机
    Simple Work Queue-简单工作队列\Work Queues-工作队列空交换机
    Publish/Subscribe(发布订阅模式)fanout 扇形交换机
    Routing-路由模式direct 直连交换机
    Topics-主题模式topic 主题交换机

    5. 安装- Mac安装

    5.1安装命令

    通过brew安装,输入命令

    /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
    
    • 1

    在这里插入图片描述

    选择下载源,确认后,会提示输入电脑密码,之后进入下载,过程较长,等待的时候可以去做其他的事儿啦;
    在这里插入图片描述
    按照提示依次执行以下命令

    //使配置立即生效
    source /Users/zhxy/.profile
    
    • 1
    • 2

    出现如图提示,就已经成功安装啦
    在这里插入图片描述
    在这里插入图片描述

    5.2 新增用户名、密码

    如果忘记账号密码,需要新增一个管理员账号,然后进去修改账号密码
    在服务器上运行以下命令即可:

    rabbitmqctl add_user newadmin newpassword
    rabbitmqctl set_user_tags newadmin administrator
    rabbitmqctl set_permissions -p / newadmin "." "." ".*"
    newadmin为新管理员账号,可以自行命名
    newpassword为密码
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5.3 启动RabbitMQ服务

    上面配置完成后,需要关闭终端窗口,重新打开,或者重新打开一个终端窗口,输入下面命令即可启动RabbitMQ服务:

    rabbitmq-server
    
    • 1

    5.4 登录Web管理界面

    浏览器输入localhost:15672,账号密码全输入guest即可登录,或者输入自己创建的用户名、密码
    在这里插入图片描述

  • 相关阅读:
    Event loop事件循环
    使用docker简单编译k20pro内核
    java 单例模式
    5.Nginx负载均衡实例
    企业数字化转型,入门该选择怎样的平台?
    REST风格 | Springboot | 开发风格
    Element-UI+vue实现登录表单
    MySQL 是怎样运行的:单表访问方法及基于成本的优化
    MySQL数据优化
    数学建模Matlab之评价类方法
  • 原文地址:https://blog.csdn.net/qiqibei666/article/details/122393000