RabbitMQ简介

一、安装和使用方式

  • 1.https://www.erlang.org/      https://www.rabbitmq.com/  
  • 2.先安装Erlang,管理员安装,在安装rabbitMQ,也是管理员安装,因为rabbitMQ是用Erlang语言开发的。且每个版本的RabbitMQ对应不同的Erlang版本,官网都有对应表,还有这两个安装目录不能有中文名字和空格
  • 3.进入RabbitMQ安装目录的sbin下,cmd后,执行  rabbitmq-plugins enable rabbitmq_management
  • 4.重启RabbitMQ服务,然后Sbin下,执行 rabbitmq-server.bat 
  • 5.浏览器  http://127.0.0.1:15672 用户名密码都是guest,进入rabbitMQ的管理页面

资源下载:参考绑定资源

二、基本概念理解


1.Connections:是真正的TCP/IP连接


2.Channel(信道):多路复用连接中的一条独立的双向数据流通道。它是建立在真实的TCP连接内的虚拟连接,复用TCP连接的通道。其实就是因为创建和关闭TCP连接开销都很大,所以尽量少建立连接,建立连接后开辟多个信道,让这个连接复用。


3.Exchange(交换器路由器):提供Producer到Queue之间的匹配,接收生产者发送的消息并按照路由规则转发到相应队列,本身不存,如果没有队列绑定到Exchange,发来的消息就丢弃。
    其实是为了解耦生产者和消息队列,生产者只管发送给Exchange,由Exchange来设置路由规则,转发到不同的队列。它有4种消息调度策略:fanout,direct,topic,headers。

4.Bingding(绑定):用于建立Exchange和Queue间关联,它就是路由规则,也可以理解为Exchange是一个由Binding构成的路由表。
    Bingding Key(绑定键):Exchange和Queue的绑定关系,用于匹配Routing Key,最大255字节。

5.Queue(消息队列):存储消息的一种数据结构,用来保存消息,直到消息发送给消费者,它是消息的容器,也是消息的终点。
   一个消息可以投入多个队列,但一个消息只能被一个订阅者接收,比如多个订阅者订阅一个队列,队列里的消息会平均分配给多个订阅者,而不是所有订阅者消息一样的。

6.Producer是生产者,Consumer是消费者,Message是消息由消息头和消息体构成,消息不透明。
    消息头由可选属性:routing-key(路由键)、prionity(消息优先权)、delivery-mode(是否持久性存储)等构成。路由键标记路由规则,最大255字节。

7.Broker(代理):RabbitMQ Service,服务器实体。

8.Virtual Host: 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,
   拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 /

9.Exchange消息调度策略
   三个因素:Exchange Type(Exchange的类型),Binding Key(Exchange和Queue的绑定关系),消息的标记信息(Routing Key和headers)。
   生产者发送消息的时候一般会指定一个已经在Exchange中配置好Routing Key,Exchange接收到后会根据Routing Key与Exchange Type和Bing Key联合使用确定消息进入哪个队列。
   Exchange Type和Bingding Key一般都是固定配置好的。

   Exchange Type:fanout,direct,topic,headers。

1).Fanout(订阅模式|广播模式)
  交换器会把给它的所有消息发送到该交换器有绑定的消息队列中,在这种模式下,Bingding key和Routing Key无效了,只要有绑定就转发,
  类似子网广播,每台机器都活得一份复制的消息。这种模式是最快的。

2).Direct(路由模式)
  这是一种精确匹配:消息的Routing Key与Exchange和Queue间的Bingding Key完全匹配时候才转发到该Queue。Direct是Exchange的默认模式。
  MQ默认提供了一个名字是空字符串的,类型是Direct,并且绑定到所有Queue(每一个Queue和这个无名Exchange间的Bingding Key是Queue的名字)的Exchange。

3).Topic策略
  这是一种模糊匹配。Topic通过模式匹配分配消息,姜路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。
  可以理解为直接策略的进阶版,直接策略(如Direct)是完全精确匹配,而topic则支持正则匹配,满足某类指定规则的,可以分发过去。

4).Headers策略 
 这个用的不多,他说根据Message的一些头部信息来分发过滤Message,忽略routing key的属性,如果header信息和message消息相匹配分发。

三、界面简介


1.Overview


MQ的概览情况,里面包括集群各个节点的信息、端口映射信息;
Totals: 准备消费的消息数、待确认的消息数、消息总数以及消息的各种处理速率(发送速率、确认速率、写入硬盘速率等等)。
Nodes: 其实就是支撑 RabbitMQ 运行的一些机器,相当于集群的节点。点击每个节点,可以查看节点的详细信息。
Churn statistics: 展示的是 Connection、Channel 以及 Queue 的创建/关闭速率。这个里边展示了端口的映射信息以及 Web 的上下文信息。
Ports and contexts:
5672 是 RabbitMQ 通信端口。
15672 是 Web 管理页面端口。
25672 是集群通信端口。
Export definitions && Import definitions: 两个可以导入导出当前实例的一些配置信息:

2.Connections


MQ运行中的当前保持连接的连接信息,其中包含了连接的虚拟主机路径(virtual host),链接的主机及端口、那个用户连接的,状态等信息。在java代码中通过ConnectionFactory 的 newConnection() 后进行创建一个连接,无论是消息生产者还是消息消费者,只要连接上来了这里都会显示出来,当使用connection.close()之后 连接将关闭。

3.Channels


信道或者通道,Channel是在连接中存在的,一个Connection中可以有多个Channel。在Java代码中 通过连接来创建信道。当代码执行connection.createChannel(),该界面下面就会有信道信息,它和连接紧密相关;一个连接可以有多个通道,这个多个通道通过多线程实现,一般情况下,我们在通道中创建队列、交换机等。生产者的通道一般会立马关闭;消费者是一直监听的,通道几乎是会一直存在。

Channel:通道名称。
User name:该通道登录使用的用户名。
Model:通道确认模式,C 表示 confirm;T 表示事务。
State:通道当前的状态,running 表示运行中;idle 表示空闲。
Unconfirmed:待确认的消息总数。
Prefetch:Prefetch 表示每个消费者最大的能承受的未确认消息数目,简单来说就是用来指定一个消费者一次可以从 RabbitMQ 中获取多少条消息并缓存在消费者中,一旦消费者的缓冲区满了,RabbitMQ 将会停止投递新的消息到该消费者中直到它发出有消息被 ack 了。总的来说,消费者负责不断处理消息,不断 ack,然后只要 unAcked 数少于 prefetch * consumer 数目,RabbitMQ 就不断将消息投递过去。
Unacker:待 ack 的消息总数。
publish:消息生产者发送消息的速率。
confirm:消息生产者确认消息的速率。
unroutable (drop):表示未被接收,且已经删除了的消息。
deliver/get:消息消费者获取消息的速率。
ack:消息消费者 ack 消息的速率。

4.Exchange


***交换机,它与队列进行绑定后,消息根据exchang的类型,按照不同的绑定规则分发消息到消息队列中,可以是一个消息被分发给多个消息队列,也可以是一个消息分发到一个消息队列,和队列紧密相关;
Type 表示交换机的类型。
Features 有两个取值 D 和 I。D 表示交换机持久化,将交换机的属性在服务器内部保存,当 MQ 的服务器发生意外或关闭之后,重启 RabbitMQ 时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。I 表示这个交换机不可以被消息生产者用来推送消息,仅用来进行交换机和交换机之间的绑定。
Message rate in 表示消息进入的速率。Message rate out 表示消息出去的速率。
name 添加的交换机名称
type 交换机类型,有四种;
直连交换机:Direct exchange;
扇形交换机:Fanout exchange;
主题交换机:Topic exchange;
首部交换机:Headers exchange
Durability 是否需要持久化,设置是否持久 durab 设置为 true 表示持久化, 反之是非持久,设置为true则将Exchange存盘,即使服务器重启数据也不会丢失
Auto delete设置是否自动删除,当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange,简单来说也就是如果该Exchange没有和任何队列Queue绑定则删除
Internal 设置是否为rabbitmq内部使用, true表示是内部使用, false表示不是内部使用
Arguments 分发器的其他设置项,json格式;可以设置消息最大数量等属性
下面还有一些常用的操作:
Bindings:交换机和队列建立绑定关系
Publish message:发送消息;通过交换机发送消息到和它有绑定关系的队列中;

5.Queue


队列,是Massage的落脚点和等待接收的地方,Queue很适合做负载均衡,RabbitMQ可以在若干consumer中间实现轮流调度(Round-Robin);
Features: 表示消息队列的特性,D 表示消息队列持久化。
State: 表示当前队列的状态,running 表示运行中;idle 表示空闲。
Ready: 表示待消费的消息总数。
Unacked: 表示待应答的消息总数。
Total: 表示消息总数 Ready+Unacked。
incoming: 表示消息进入的速率。
deliver/get: 表示获取消息的速率。
ack: 表示消息应答的速率。

Add a new queue 可以添加一个新的消息队列。
点击每一个消息队列的名称,可以进入到消息队列中。进入到消息队列后,可以完成对消息队列的进一步操作;发送消息。获取一条消息。移动一条消息(需要插件的支持)。删除消息队列。清空消息队列中的消息。
**Durablity: ** 持久化选项,Durable(持久化保存),Transient(即时保存), 持久化保存会在RabbitMQ宕机或者重启后,未消费的消息仍然存在,即时保存在RabbitMQ宕机或者重启后交换机会不存在。需要重新定义该Exchange。
即使保存可以理解为计算机内存,关机就没了。
持久化保存可以理解为硬盘,关机,文件还在。
Ack mode中:
Nack message requeue true 获取消息,不做ack应答,消息重新入队列;
reject requeue true 拒绝获取消息,消息重新放入队列;
reject requeue false 拒绝获取消息,消息不重新入队列,会删除消息;
Automatic ack 自动ack应答,收到消息,消息会删除

6.Admin


用户增删改查以及虚拟主机、规则等的配置;
各项属性含义如下:
Name: 表示用户名称。
Tags: 表示角色标签,只能选取一个。
Can access virtual hosts: 表示允许进入的虚拟主机。
Has password: 表示这个用户是否设置了密码。常见的两个操作是管理用户和虚拟主机。
Add a user 可以添加一个新的用户,添加用户的时候需要给用户设置 Tags,其实就是用户角色,如下:
none: 不能访问 management plugin
management: 用户可以通过 AMQP 做的任何事 列出自己可以通过 AMQP 登入的 virtual hosts 查看自己的 virtual hosts 中的 queues,
exchanges 和 bindings 查看和关闭自己的 channels 和 connections 查看有关自己的 virtual hosts 的“全局”的统计信息,包含其他用户在这些 virtual hosts 中的活动
policymaker: management 可以做的任何事 查看、创建和删除自己的 virtual hosts 所属的 policies 和 parameters
monitoring:management 可以做的任何事 列出所有 virtual hosts,包括他们不能登录的 virtual hosts 查看其他用户的 connections 和 channels 查看节点级别的数据如 clustering 和 memory 使用情况 查看真正的关于所有 virtual hosts 的全局的统计信息
administrator:policymaker 和 monitoring 可以做的任何事 创建和删除 virtual hosts 查看、创建和删除 users 查看创建和删除 permissions 关闭其他用户的 connections
impersonator (模拟者) 模拟者,无法登录管理控制台。

   
 

  • 41
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,用于在应用程序之间传递消息。它使用AMQP(高级消息队列协议)作为消息传递的标准协议。在实际应用中,可以使用RabbitMQ来实现消息的生产和消费。 要实现一个RabbitMQ实战demo,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Erlang和RabbitMQ。你可以使用命令`rabbitmq-server -detached`来启动RabbitMQ服务,并使用`rabbitmqctl status`来查看服务状态。如果需要关闭服务,可以使用`rabbitmqctl stop`命令。 2. 在你的应用程序中,添加RabbitMQ的配置信息。你可以在应用的配置文件中添加以下内容: ``` spring.application.name=springboot-rabbitmq spring.rabbitmq.host=192.168.217.128 spring.rabbitmq.port=5672 spring.rabbitmq.username=developer spring.rabbitmq.password=dev123456 spring.rabbitmq.virtual-host=/ spring.rabbitmq.listener.direct.acknowledge-mode=manual ``` 其中,`spring.rabbitmq.host`是RabbitMQ的IP地址,`spring.rabbitmq.port`是RabbitMQ的端口号,`spring.rabbitmq.username`和`spring.rabbitmq.password`是RabbitMQ的用户名和密码,`spring.rabbitmq.virtual-host`是RabbitMQ的虚拟主机,`spring.rabbitmq.listener.direct.acknowledge-mode`是消息的确认模式。 3. 在你的应用程序中,编写生产者和消费者的代码。生产者负责发送消息到RabbitMQ,消费者负责接收并处理消息。你可以根据你的需求来编写相应的代码逻辑。 4. 运行你的应用程序,并测试RabbitMQ的功能。你可以通过发送消息到RabbitMQ来测试生产者的功能,然后通过消费者来接收并处理这些消息。 这是一个简单的RabbitMQ实战demo的步骤,你可以根据你的具体需求来进行相应的修改和扩展。希望对你有帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [RabbitMQ 实战](https://blog.csdn.net/weixin_58026642/article/details/121486694)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [《RabbitMQ 实战指南》第一章 RabbitMQ 简介](https://blog.csdn.net/qq_45593575/article/details/122155110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辣香牛肉面

感谢有缘之人的馈赠

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值