什么是消息? 消息是信息的载体。
什么是中间件? 中间件(Middleware),是提供软件和软件之间连接的软件,以便于软件各部件之间的沟通。
使用消息中间件的优势:
使用消息中间件的作用:
举例:
没有使用消息中间件之前:
使用消息中间件之后:
特点:
优点: a.基于JAVA,跨平台运行 b.可以用JDBC连接多种数据库 c.有完善的界面、监控、安全机制 d.自动重连和错误重试
缺点: a.社区活跃度不及RabbitMQ b.目前重心放到6.0产品Apollo,对5的Bug维护较少 c.不适合用于上千个队列的应用场景
特点:
优点: a.基于Erlang,支持高并发 b.支持多种平台,多种客户端,文档齐全 c.可靠性高 d.在互联网公司有较大规模的应用,社区活跃度高
缺点: a.Erlang语言较为小众,不利于二次开发 b.代理架构下,中央节点增加了延迟,影响性能c.使用AMQP协议,使用起来有学习成本 c.使用AMQP协议,使用起来有学习成本
特点:
优点: a.基于Java,方便二次开发 b.单机支持1万以上持久化队列 c.内存与磁盘都有一份数据,保证性能+高可用 d.开发度较活跃,版本更新很快
缺点: a.客户端种类不多,较成熟的是Java及C++ b.没有Web 管理界面,提供了一个CLI(命令行界面) c.社区关注度及成熟度不如RabbitMQ
特点:
优点: a.原生的分布式系统 b.零拷贝技术,减少IO操作步骤,提高系统吞吐量 c.快速持久化:可以在o(1)的系统开销下进行消息持久化 d.支持数据批量发送和拉取
缺点: a.单机超过64个队列/分区时,性能明显劣化 b.使用短轮询方式,实时性取决于轮询间隔时间 c.消费失败不支持重试 d.可靠性比较差
底层的语言和平台:Erlang
由爱立信公司开发(Ericsson Language) 一门为交换机软件开发诞生的编程语言
Erlang特点:
谁在用RabbitMQ?
什么是AMQP协议? 协议指的是规范,实现指的是具体情况。RabbitMQ软件的本身就是对AMQP协议的实现。
学AMQP协议的意义:
图解AMQP协议
a. Broker:接收和分发消息的应用,RabbitMQ就是MessageBroker b. Virtual Host:虚拟Broker,将多个单元隔离开 c. Connection: publisher / consumer和broker之间的TCP连接 d. Channel: connection内部建立的逻辑连接,通常每个线程创建单独的channel e. Routing Key:路由键,用来指示消息的路由转发,相当于快递的地址 f. Exchange:交换机,相当于快递的分拨中心 g. Queue:消息队列,消息最终被送到这里等待consumer取走 h. Binding: exchange和queue之间的虚拟连接,用于message的分发依据
Exchange——AMQP协议的核心概念
三种类型Exchange
小结: Exchange主要有3种类型:Direct / Topic / Fanout Direct(直接路由) : Routing Key = Binding Key,容易配置和使用 Fanout (广播路由):群发绑定的所有队列,适用于消息广播 Topic(话题路由)︰功能较为复杂,但能降级为Direct,建议优先使用,为以后拓展留余地
Windows安装
Docker安装(开发环境推荐) docker run -di --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
进入控制台:docker exec -it rabbitmq /bin/bash 进入控制台后:cd sbin/ 就可以使用rabbitmq的客户端命令 查看插件帮助:rabbitmq-plugins --help 查看插件列表:rabbitmq-plugins list
网页端管理工具
启用网页端管理工具: 启动应用: rabbitmq-plugins enable rabbitmq_management 浏览器打开:127.0.0.1:15672 默认用户名: guest 默认密码: guest
命令行工具使用: 使用场景
状态查看相关命令: 查看状态: rabbitmqctl status 查看绑定:rabbitmqctl list_bindings 查看channel: rabbitmqctl list_channels 查看connection: 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 关闭应用: rabbitmqctl stop_app,保留Erlang虚拟机(暂停) 关闭应用: rabbitmqctl stop,并关闭Erlang虚拟机
集群相关命令: 加入集群: rabbitmqctl join_cluster 离开集群: rabbitmqctl reset
镜像队列命令: 设置镜像队列: rabbitmqctl sync_queue 取消镜像队列: rabbitmqctl cancel_sync_queue