RabbitMQ从初学到精通一

今天来学习一下RabbitMQ,从最起初的安装开始学习:

一、RabbitMQ 安装图
1 rabbitMQ下载
http://www.rabbitmq.com/download.html
下载文件rabbitmq-server-mac-standalone-3.7.4.tar.xz
注意,这里的文件是xz压缩文件,需要用xz -d rabbitmq-server-mac-standalone-3.7.4.tar.xz  解压,如果没有安装xzUtil,需要先安装xzutil
下载地址为:https://tukaani.org/xz/
tar文件解压缩:tar -xzvf rabbitmq-server-mac-standalone-3.7.4.tar
解压缩完之后,就可以直接启动了
2  启动
cd sbin/
先打开rabbitmq管理端:./rabbitmq-plugins enable rabbitmq_management
./rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
在启动:rabbitmq-server
启动起来了之后访问管理端界面:http://localhost:15672/
用户名:guest
密码:guest
二、工作原理
MQ全名Message Queue,是一种分布式应用程序的通讯方法,是消费-生产者模型的典型代表,producer不停地往消息队列中发送消息,而consumer在另一端接受或者订阅消息。RabbitMQ是MQ产品的典型代表,是一款基于AMQP协议可复用的企业消息系统。业务上可以实现消息提供者服务于消费者服务的解耦,实现高可用性的消息传输机制,下面简单介绍下Rabbit常用概念,基本框架以及通讯过程。
1 概念介绍:
连接(Connection):一个网络连接,比如TCP/IP套接字连接。
会话(Session):端点之间的命名对话。在一个会话上下文中,保证“恰好传递一次”。
信道(Channel):多路复用连接中的一条独立的双向数据流通道。为会话提供物理传输介质。
客户端(Client):AMQP连接或者会话的发起者。AMQP是非对称的,客户端生产和消费消息,服务器存储和路由这些消息。
服务器(Server):接受客户端连接,实现AMQP消息队列和路由功能的进程。也称为“消息代理”。
消息头(Header):描述消息数据属性的一种特殊段。
消息体(Body):包含应用程序数据的一种特殊段。消息体段对于服务器来说完全透明——服务器不能查看或者修改消息体。
消息内容(Content):包含在消息体段中的的消息数据。
交换器(Exchange):服务器中的实体,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
交换器类型(Exchange Type):基于不同路由语义的交换器类。
消息队列(Message Queue):一个命名实体,用来保存消息直到发送给消费者。
绑定器(Binding):消息队列和交换器之间的关联。
绑定器关键字(Binding Key):绑定的名称。一些交换器类型可能使用这个名称作为定义绑定器路由行为的模式。
路由关键字(Routing Key):一个消息头,交换器可以用这个消息头决定如何路由某条消息。
持久存储(Durable):一种服务器资源,当服务器重启时,保存的消息数据不会丢失。
临时存储(Transient):一种服务器资源,当服务器重启时,保存的消息数据会丢失。
持久化(Persistent):服务器将消息保存在可靠磁盘存储中,当服务器重启时,消息不会丢失。
非持久化(Non-Persistent):服务器将消息保存在内存中,当服务器重启时,消息可能丢失。
消费者(Consumer):一个从消息队列中请求消息的客户端应用程序。
生产者(Producer):一个向交换器发布消息的客户端应用程序。
虚拟主机(Virtual Host):一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。客户端应用程序在登录到服务器之后,可以选择一个虚拟主机。
2 系统架构

Rabbitmq系统最核心的组件是Exchange和Queue,下图是系统简单的示意图。Exchange和Queue是在rabbitmq server(又叫做broker)端,producer和consumer在应用端。

 

producer&Consumer

producer指的是消息生产者,consumer消息的消费者。

Queue

消息队列,提供了FIFO的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。

  1. 设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash,数据丢失
  2. 设置为临时队列,queue中的数据在系统重启之后就会丢失
  3. 设置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除

Binding

所谓绑定就是将一个特定的 Exchange 和一个特定的 Queue 绑定起来。Exchange 和Queue的绑定可以是多对多的关系。

virtual host

在rabbitmq server上可以创建多个虚拟的message broker,又叫做virtual hosts (vhosts)。每一个vhost本质上是一个mini-rabbitmq server,分别管理各自的exchange,和bindings。vhost相当于物理的server,可以为不同app提供边界隔离,使得应用安全的运行在不同的vhost实例上,相互之间不会干扰。producer和consumer连接rabbit server需要指定一个vhost。

三、rabbitMq常用命令

net stop RabbitMQ && net start RabbitMQ:停止RabbitMQ后启动

rabbitmqctl list_queues:查看所有队列信息

rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)

rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的

rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)

rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段

rabbitmqctl status:节点状态

rabbitmqctl add_user username password:添加用户

rabbitmqctl list_users:列出所有用户

rabbitmqctl list_user_permissions username:列出用户权限

rabbitmqctl change_password username newpassword:修改密码

rabbitmqctl add_vhost vhostpath:创建虚拟主机

rabbitmqctl list_vhosts:列出所有虚拟主机s

rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*":设置用户权限

rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限 

rabbitmqctl clear_permissions -p vhostpath username:清除用户权限

rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息

rabbitmqctl delete_user username:删除用户

rabbitmqctl delete_vhost vhostpath:删除虚拟主机

通信过程

假设P1和C1注册了相同的Broker,Exchange和Queue。P1发送的消息最终会被C1消费。基本的通信流程大概如下所示:

  1. P1生产消息,发送给服务器端的Exchange
  2. Exchange收到消息,根据ROUTINKEY,将消息转发给匹配的Queue1
  3. Queue1收到消息,将消息发送给订阅者C1
  4. C1收到消息,发送ACK给队列确认收到消息
  5. Queue1收到ACK,删除队列中缓存的此条消息

Consumer收到消息时需要显式的向rabbit broker发送basic.ack消息或者consumer订阅消息时设置auto_ack参数为true。在通信过程中,队列对ACK的处理有以下几种情况:

  1. 如果consumer接收了消息,发送ack,rabbitmq会删除队列中这个消息,发送另一条消息给consumer。
  2. 如果cosumer接受了消息, 但在发送ack之前断开连接,rabbitmq会认为这条消息没有被deliver,在consumer在次连接的时候,这条消息会被redeliver。
  3. 如果consumer接受了消息,但是程序中有bug,忘记了ack,rabbitmq不会重复发送消息。
  4. rabbitmq2.0.0和之后的版本支持consumer reject某条(类)消息,可以通过设置requeue参数中的reject为true达到目地,那么rabbitmq将会把消息发送给下一个注册的consumer。

 

四、遇到的问题

1  执行 rabbitmqctl list_queues  报错,

Error: unable to perform an operation on node 'rabbit@markfengdeMacBook-Pro'. Please see diagnostics information and suggestions below.

 

 

转载于:https://www.cnblogs.com/xiaozhenfeng/p/rabbitmq.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于自动驾驶, Mobileye 的 14 个最新观点

来源:新智驾作者 :苏珊珊为了在2025年实现消费级别的自动驾驶,Mobileye都做了什么?Mobileye近日在CES 2021展会上进一步分享了其在ADAS及全自动驾驶领域的战略规划,并详细介绍了Mobileye为实现消费级别的全自动驾驶和“…

linux ps进程管理命令,Linux 进程管理命令之ps

这个命令会显示某一时刻系统的进程状态。ps是通过/proc接口,让管理员查看内核进程状态信息。为了响应一切皆文件,进程参数模拟成文件系统类型(文件),参数路径模拟成目录/proc/# 每个进程都有一个进程ID号这个目录里存放的各种进程的状态信息启…

2020年中国智慧城市发展值得关注的技术

文章来源:Gartner图片来源:网络每年Gartner发布的技术成熟度曲线(The Hype Cycle)报告都备受市场瞩目,也成为政府及企业做出重大投资决策的风向标。其原因在于,它不仅能够让CIO了解到年度最备受瞩目和极具商…

腾讯研究院发布《2021数字科技前沿应用趋势》

来源 :腾讯研究院编辑: 陈近梅2021年1月9日,在腾讯研究院举办的“腾讯科技向善暨数字未来大会2021”上,《变量:2021数字科技前沿应用趋势》报告正式发布。该报告由腾讯研究院发起,先后访谈业界权威专家&…

linux导入pgsql日志目录,Centos下PostgreSQL安装及修改数据目录

记录下在Centos7.6 安装PostgreSQL数据库,版本10.12的过程,第一次装,遇到的坑太多了,网上教程坑也多,有的版本不一样方法不一样。花了半天时间…背景:内网服务器,搭了个sonarqube代码审计系统&a…

H3 BPM之流程包(流程Demo)导入导出

流程包是什么? 流程包指的是工作流从表单设计到流程设计产生的数据包,所有的表单逻辑和流程模型逻辑数据都包含在里面。由于各种厂商工作流软件运行机制不一样,流程包不支持在不同产品之间导入导出,只支持在同一款工作流软件里面导…

11大改革举措!国家自然科学基金2021年项目指南发布

来源:国家自然科学基金委员会网站编辑:宗华排版:李言1月15日,国家自然科学基金委员会网站更新了2021年度项目指南。点击链接进入:2021年项目指南未来智能实验室的主要工作包括:建立AI智能系统智商评测体系&…

Servlet API

Servlet API:由两个软件包组成:对应于HTTP协议的软件包,对应于除HTTP协议以外的软件包 即Servlet API 可以适用于任何通信协议 我们学习的Servlet,是位于javax.servlet.http包中的类和接口,是基础HTTP协议 Servlet继承关系&…

hibernate框架学习之使用SQLQuery查询数据

SQLQuery对象的获取  Hibernate支持使用原生SQL语句进行查询,通过session对象获得SQLQuery对象进行,需要传入SQL语句  SQLQuery createSQLQuery(String sqlStr)  SQLQuery query session.createSQLQuery(“select * from tbl_user");sqlStr是…

Linux下载cfg命令,Linux安装详解-配置ks.cfg实现自动安装过程

之前发过一篇关于通过PXE实现Linux批量无人值守自动安装的文章(可以参考http://www.linuxidc.com/Linux/2011-08/39949.htm),不过写的只是具体的配置和操作,对于原理部分没有说明,最近通过一段时间的学习,把linux的启动安装过程深…

人类如何接近“宇宙无限”?微积分的力量无处不在

来源:遇见数学距离2021年高考还有不到两百天,当无数高中生还在为千军万马过独木桥儿紧锣密鼓准备之时,有部分初中生却已经一只脚踏入了清华大学的校门。2020年的最后一天,清华大学发布官方通知,将启动“丘成桐数学科学…

三层架构

1.三层架构 与MVC设计模式的目标一致,都是为了 解耦合,提高代码复用 区别:二者对项目理解的角度不同 2.三层组成: 表示层(USL,User Show Layer;视图层) 业务逻辑层(BLL,Business Logic Layer;Service层) 数据访问层(DAL,Dat…

这10个著名的思想实验,竟然是物理学家完成的

来源 : 知更社区在物理学中,有一类特殊的实验:它们不需要购置昂贵的仪器,不需要大量的人力物力,需要的只是有逻辑的大脑;而这种实验却可以挑战前人的结论,建立新的理论,甚至引发人们…

怎样查看Jdk是32位还是64位

怎样查看Jdk是32位还是64位、、 ------------- --------------- ------------- 其实还可以这样看哦、、 --------------- ------------- ---------------转载于:https://www.cnblogs.com/GaoNa/p/9352283.html

计算机网络概念

计算机网络:将独立的,分散的计算机系统(手机,电脑)通过线路,通信设备(路由器,交换机)连接起来,由软件来实在资源共享,信息传递的系统 计算机网络的功能: 1. 数据通信 eg&#xff…

【创新应用】5AloT(5G+AI+物联网)深度研究报告:下一轮科技红利

来源:智能研究院当前正处于两轮科技红利之间,5AIoT(5GAI物联网)将成继移动互联网后,下一轮科技红利最大的机遇。智能手机和移动互联网连接数趋于饱和,但伴随 5G、wifi、AI 等技术发展、成本下降,以及场景逐渐成熟&…

四本关于意识问题的英文新书

来源:混沌巡洋舰 The Feeling of Life Itself: Why Consciousness Is Widespread but Cant Be Computed有一种观点认为,意识的出现比以前假设的更广泛,它是一种活着的感觉,而不是一种计算或者一种巧妙的幻觉。在《生命之感》一书…

LVS入门篇(五)之LVS+Keepalived实战

一、实验架构和环境说明 (1)本次基于VMware Workstation搭建一个四台Linux(CentOS 7.4)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台为主机,另一台为备机),另…

任正非深度剖析技术差距:我们为何憎恨化学?

文章来源:今日头条、化工技术宝典关于华为芯片难题和华为情结,近日觉得很有必要必须表达点什么,算是纪念2020这个寒冬,以表明国人还是有人是清醒的,哪怕是装睡着,但心中是明白的。2020年11月10日上午10点&a…

【Brain】复旦类脑研究院:破解大脑奥秘,为实现人工智能自我思考奠定基础...

文章来源:新民晚报图说:复旦类脑研究院 采访对象供图理解大脑的结构与功能是21世纪最具挑战性的前沿科学问题,谁揭开大脑运作的神秘面纱,谁就在重大脑疾病防治和全球智能产业革命中抢占了先机。利用磁共振成像技术观察大脑内部结构&#xff0…