RabbitMQ

RabbitMQ简介

rabbitmq是一个开源的AMQP实现,服务器端用erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

端口

4369:是erlang端口/节点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。
5672/5671:AMQP 0-9-1和1.0客户端端口,没有使用SSL和使用SSL的端口。
25672:用于rabbitMQ节点间和CLI工具通信,配合4369使用。
15672:HTTP_API端口,管理员用户才能访问,用于管理rabbitmq,需要启用management插件。
61613/61614:当STOMP插件启用的时候打开,作为STOMP客户端端口(根据是否使用TLS选择)
1883/8883:当MQTT插件启用的时候打开,作为MQTT看客户端端口(根据是否使用TLS选择)
15674:基于websocket的STOMP客户端端口(当插件web STOMP启用的时候打开)
15674:基于websocket的MQTT客户端端口(当插件web MQTT启用的时候打开)
RabbitMQ绑定端口安装完之后,如果访问不了有可能是防火墙的问题

管理界面

RabbitMQ安装包中带有管理插件,但是需要手动激活

rabbitmq-plugins enable rabbitmq_management

RabbitMQ有一个默认的用户“guest”,但这个用户默认只能用本机访问,要让其他机器访问,需要穿件一个新用户,为其分配权限

#添加用户
rabbitmqctl add_user admin admin 
#为用户分配权限
rabbitmqctl set_user_tags admin administrator
#为用户分配资源权限
rabbitmqctl set_permissions -p /admin ".*" ".*" ".*"

角色分类

none

不能访问management plugin

manegement

用户可以通过AMQP做的任何事外加:

列出自己可以通过AMQP登入的vitual hosts

查看自己的virtual hosts中的queues、exchanges和bindings

查看和关闭自己的channels和connections

查看有关自己的virtual hosts的“全局”的统计信息,包括其他用户在这些virtual hosts中的活动

policymaker

management可以做的任何事外加:
查看、创建、删除自己的virtual hosts所属的policies和parameters

monitoring

management可以做的任何事外加:

列出所有virtual hosts,包括他们不能登录的virtual hosts

查看其他用户的connection和channels

查看节点级别的数据如clustering和memory使用情况

查看真正的关于所有virtual hosts的全局的统计信息

administrator

policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts

查看、创建、删除users

查看、创建、删除permissions

关闭其他用户的connections

AMQP(Advanced Message Queuing Protocol)(可以不需要理解,当成协议的一种就好)

高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

结构

在这里插入图片描述

生产者流转过程

在这里插入图片描述

rabbitmq核心概念

producer在发送消息前建立链接connection ,在connection 里可以建立多个channel。producer发送的消息有一个路由键(routerKey),将这个消息先发送到交换机exchange,然后从exchange再发送到queue,而exchange与对应的queue是通过bind绑定在一起的。

exchange类型

fanout:交换机会把接收到的消息发送到所有queue
direct:根据bindkey和routekey的匹配来分发消息到指定的queue
默认交换机:在producer没有指定交换机的情况下,是会把消息发送到默认的交换机上,默认交换机会根据消息内queue的名字来分发到指定的queue上
Topic:可以模糊匹配的交换机,在bind的时候是使用com.*这种模式来绑定queue,当producer发送的消息内routekey是com.*格式的时候就会匹配到topic绑定的queue
header:根据消息的内容来匹配,如消息内有x=1,header交换机绑定queue时也用的x=1来作为规则,那么这条消息会被header发送到指定queue里

exchange绑定queue

在控制台里找到exchange
在这里插入图片描述
也可以在queue里选择exchange
在rabbitmq的发布订阅模式下,channel的basicQos属性可以设置同一时刻,服务器发送几条消息给消费者。这个值不能太小,那样会造成consumer与broker交互频繁,也不能设置过大,因为如果consumer消费速度比较慢,那么拿到了大量消息后,其他consumer就处于闲置状态,因为大部分消息已经分发给了那个处理慢的consumer。

消息组成

消息体:
在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如json串。当然也可以进一步对这个消息体进行序列化
附加信息:
用来标书这条消息,如目标交换机名字、路邮键、一些自定有属性等

broker

对于rabbitmq来说,一个broker可以看成一个rabbitmq服务节点,,或者服务实例。也可以将一个broker看做一台rabbitmq服务器

virtual host

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

channel

频道或通道,是建立在connection连接上的一种轻量级连接。
大部分操作实在channel接口中完成的,包括定义队列的声明queueDeclare、交换机的声明exchangeDeclare、队列的绑定queueBind、发布消息basicPublish、消费消息basicConsume等。如果把connection比作一条光纤电缆的话,那么channel就是光缆中的一束光纤。connection可以创建任意数量的channel

routingKey

路邮键。生产者将消息发给交换机的时候,一般会指定一个路邮键,

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值