【RabbitMQ】初识RabbitMQ

前言

防止忘记

介绍

  • 消息中间件是软件和软件之间发送消息的软件
  • 消息中级件最大的作用是异步处理、系统解耦
  • 消息中级件还有消息收集广播、流量控制等功能

消息中间件技术选型

主流消息中间件

  • Apache ActiveMQ
  • 由Apache 出品,Java开发,支持JMS1.1协议和J2EE1.4规范。
    支持广泛的链接协议:OpenWire/STOMP/REST/XMPP/AMQP
    支持多种语言客户端,支持插件
    管理方便,便于配置集群代理
  • 优点:
    基于Java,跨平台运行
    可以用户JDBC连接多种数据库
    有完善的界面、监控、安全机制
    自动重连和错误重试
  • 缺点:
    社区活跃度不及RabbitMQ
    目前重心放到6.0产品Apollo,对5的BUG维护较少
    不适合用于上千个队列的应用场景
  • Rabbit MQ
  • 特点:
    当前最主流的消息中间件
    高可靠性,支持发送确认,投递确认等特性
    高可用,支持镜像队列
  • 优点:
    基于Erlang,支持高并发
    支持多平台,多种客户端,文档安全
    可靠性高
    在互联网公司有较大规模的应用,社区活跃度高
  • 缺点:
    Erlang语言较于小众,不利于二次开发
    代理架构下,中央节点增加了延迟,影响性能
    使用AMQP协议,使用起来有学习成本
  • Apache RocketMQ
  • 特点:
    阿里巴巴团队开发,经受双十一考验
    能够保证严格的消息顺序
    亿级消息堆积能力
  • 优点:
    基于Java,方便二次开发
    单机支持1万以上持久化队列
    内存与磁盘都有一份数据,保证性能+高可用
    开发度较活跃,版本更新很快
  • 缺点:
    客户端种类不多,较成熟的是Java及C++
    没有web管理界面,提供了一个CLI(命令行界面)
    社区关注度及成熟度不如RabbitMQ
  • Apache kafka
  • 特点:
    Linkedln开发的分布式的日志提交系统
    独特的分区特性,适用于大数据系统
  • 优点:
    原生的分布式系统
    零拷贝技术,减少IO操作步骤,提高系统吞吐量
    快速支持化:可以在O(1)的系统开销下进行消息持久化
    支持数据批量发送和拉取
  • 缺点:
    单机超过64个队列/分区时,性能明显劣化
    使用短轮询方式,实时性取决与轮询间隔时间
    消费失败不支持重试
    可靠性比较差
  • 总结
  • ActiveMQ最"老",但维护较慢
  • RabbitMQ最"火",适合大小公司,各种场景通杀
  • RocketMQ最"猛",功能强,但考验公司运维能力
  • Kafka最"强",支持超大量数据,但消息可靠性弱

RabbitMQ高性能的原因

  • ERLANG语言:一门为交换机软件开发诞生的语言
  • 特点:
    a.通用的面向并发的编译语言,适用于分布式系统
    b.基于虚拟机解释运行,跨平台部署
    c.进程间上下文切换效率远高于C语言
    d.有着和原生Socket一样的延迟

RabbitMQ在银行和金融领域也有着相当高的占有率,甚至微服务间的通讯不部分依靠消息,RabbitMQ使用量最大

AMQP协议介绍

请添加图片描述

  • Broker:接收和分发消息的应用,RabbitMQ就是MessageBroker
  • Virtual Host:虚拟Broker,将多个单元隔离开
  • Connection:publisher/consumer和broker之间的TCP连接
  • Channel:connection内部建立逻辑连接,通常每个线程创建单独的channel
  • RoutingKey:路由键,用来指示消息的路由转发,相当于快递的地址
  • Exchange:交换机,相当于快递的分拨中心
  • Queue:消息队列,消息最终被送到这里等待consumer取走
  • Binding:exchange和queue之间的虚拟连接,用于message的分发依据

Exchange(RabbitMQ的核心组件)

  • Exchange是AMQP协议和RabbitMQ的核心组件
  • Exchange的功能是根据绑定关系和路由键为消息提供路由,将消息转发至相应的队列
  • Exchange有4种类型:Direct/Topic/Fanout/Headers,其中Headers使用很少,以前三种为主

DirectExchange

请添加图片描述

Fanout Exchange

请添加图片描述

Topit Exchange

请添加图片描述
请添加图片描述
请添加图片描述

http://tryrabbitmq.com/
在这里插入图片描述

  • 总结
  • AMQP协议直接决定了RabbitMQ的内部结构和外部结构
  • 对于发送者来说,将消息发给特定的Exchange
  • 消息经过Exchange路由后,到达具体队列
  • 消费者将消息从监听的队列中取走
  • Exchange主要有三种类型:Direct/Topic/Fanout
  • Direct(直接路由):Routing Key = Binding Key,容易配置和使用
  • Fanout(广播路由):群发绑定的所有队列,适用于消息广播
  • Topic(话题路由):功能较为复杂,但能降级为Direct建议优先使用,为以后扩展留余地

RabbitMQ快速安装

windwo安装

  1. 下载并安装Erlang OTP(Open Telecom Platform):
    以下两个下载网站都可以下载
    https://www.erlang.org/downloads

    https://www.erlang-solutions.com/downloads/

  2. 下载安装MQ:https://www.rabbitmq.com/
    步骤:Get Started -> Download + Installation -> windows Installer -> Using the official installer

MacOS安装

  1. brew update
  2. brew install rabbitmq
  3. brew工具会自动安装OTP依赖

Linux安装(Docker)

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

网页端管理工具介绍

  • RabbitMQ网页端管理工具也叫管理控制台、管控台
  • 管理控制台是RabbitMQ最常用的管理、配置工具
  • 管理控制台对于业务的开发、调试也非正常有用

启动前端插件

  • 启动应用:安装目录下的sbi文件,cmd运行命令rabbitmq-plugins enable rabbitmq_management
  • 浏览器打开:127.0.0.1:15672
  • 默认用户名密码:guest

管理端页面讲解

比较重要的是交换机和队列
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

命令行工具

使用场景

  • 生成环境、端口限制等不便打开网页端工具的场景
  • 使用脚本自动化配置RabbitMQ

使用口诀

  • 想看什么就List什么
  • 想清空什么就purge什么
  • 想删除什么就delete什么
  • 一切问题记得使用 --help

状态查看

查看状态

rabbitmqctl status

查看绑定

rabbitmqctl list_bindings

查看channel

rabbitmqctl list_channels

查看connections

rabbitmqctl list_connections

查看消费者

rabbitmqctl list_consumers

查看交换机

rabbitmqctl list_exchanges

队列相关

查看队列

rabbitmqctl list_queues

删除队列

rabbitmqctl delete_queue

清空队列

rabbitmqctl purge_queue

用户相关

新建用户

rabbitmqctl add_user

修改用户密码

rabbitmqctl change_password

删除用户

rabbitmqctl delete_user

查看用户

rabbitmqctl list_users

设置用户角色

rabbitmqctl rabbitmqctl set_user_tags

应用启停

启动应用

rabbitmqctl start_app

关闭应用

# 保留Erlang虚拟机(暂停)
rabbitmqctl stop_app

关闭应用

# 并关闭Erlang虚拟机
rabbitmqctl stop

集群相关

加入集群

rabbitmqctl join_cluster

离开集群

rabbitmqctl reset

镜像队列

设置镜像队列

rabbitmqctl sync_queue

取消镜像队列

rabbitmqctl cancel_sync_queue

总结

  • RabbitMQ高性能的原因
  • AMQP协议
  • Exchange解析
  • 快速安装
  • 网页端管理工具
  • 命令行工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值