rabbitMQ
什么是中间件 一定要跨平台
-
分布式消息中间件 持久性 高可用 容错性 底层还是TCP/IP
- ActiveMQ
- RabbitMQ spring 同加公司开发 开源 模式性能高
- kafka 不支持事务 性能最高
- RocketMQ 阿里滴滴联合开发
-
负载均衡中间件
- Nginx
- LVS负载均衡软件 集群
- keepAlive
- CDN
-
缓存中间件
- MemCache
- Redis
-
数据库中间件
- Mysql=> MyCat
- ShardingJdbc
-
案例分析
- 异步数据保存
- 订单数据的消息分发
- 信息容错
- 分布式锁
- 分布式会话
- 分库分表
AMQP 协议 基于TCP/IP
安装
docker 安装
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
安装后启动
2.3启用管理工具
第一步:点击打开RabbitMQ的命令窗口。如图:
第二步:输入命令rabbitmq-plugins enable rabbitmq_management
这个命令的意思是安装RabbitMQ的插件。
第三步:测试是否安装成功。
方法:访问地址: http://127.0.0.1:15672/ 默认账号:guest/guest 仅本地用户使用
用户和权限设置
添加用户:rabbitmqctl add_user username[用户名] password[密码]
分配角色:rabbitmqctl set_user_tags username administrator
[可以登录控制台、查看所有信息可以对rabbitMQ进行管理]
四种角色:
- administrator[可以登录控制台、查看所有信息可以对rabbitMQ进行管理]
- monitoring[监控者、登录控制台、查看所有信息]
- policymaker[策略制定者,登录控制台,指定策略]
- managment[普通管理员,登录控制台]
授权给新用户:rabbitmqctl set_permissions -p / username “.*” “.*” “.*”
(后面三个”*”代表用户拥有配置、写、读全部权限)
新增虚拟主机:rabbitmqctl add_vhost vhost_name
将新虚拟主机授权给新用户: rabbitmqctl set_permissions -p vhost_name username “.*” “.*” “.*”
(后面三个”*”代表用户拥有配置、写、读全部权限)
rabbitMQ常用的命令
添加一个用户: rabbitmqctl add-user admin[用户名] password[密码]
设置权限:rabbitmqctl set_user_tags username[用户名] administrator[权限]
修改密码: rabbitmqctl change_password username[用户名] newpassword[新密码]
删除用户:rabbitmqctl delete_user username[用户名]
查看所有用户:rabbitctl list_user
启动监控管理器:rabbitmq-plugins enable rabbitmq_management
关闭监控管理器:rabbitmq-plugins disable rabbitmq_management
启动rabbitmq:rabbitmq-service start
关闭rabbitmq:rabbitmq-service stop
查看所有的队列:rabbitmqctl list_queues
清除所有的队列:rabbitmqctl reset
关闭应用:rabbitmqctl stop_app
启动应用:rabbitmqctl start_app
核心组成部分
核心概念:
Server:又称Broker ,接受客户端的连接,实现AMQP实体服务。 安装rabbitmq-server
Connection:连接,应用程序与Broker的网络连接 TCP/IP/ 三次握手和四次挥手
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可以建立对各Channel,每个Channel代表一个会话任务。
Message :消息:服务与应用程序之间传送的数据,由Properties和body组成,Properties可是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则就是消息体的内容。
Virtual Host 虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个虚拟主机理由可以有若干个Exhange和Queueu,同一个虚拟主机里面不能有相同名字的Exchange
Exchange:交换机,接受消息,根据路由键发送消息到绑定的队列。(不具备消息存储的能力)
Bindings:Exchange和Queue之间的虚拟连接,binding中可以保护多个routing key.
Routing key:是一个路由规则,虚拟机可以用它来确定如何路由一个特定消息。
Queue:队列:也成为Message Queue,消息队列,保存消息并将它们转发给消费者。
队列没有声明交换机就走默认交换机
发送消息一定是交换机发送不是队列发送
交换机接收消息 推送到队列
1、 简单模式
2、
3、 发布与订阅模式 [交换机绑定消息队列 发送消息给交换机 交换机就会发送给他绑定的消息队列]
4、 路由模式direcr 默认的[fanout]不可以 默认全部 和发布与订阅的区别 在基础上加入了路由key 可以给多个key 会发给相同key的通道
5、 主题模式 路由模式选择topic 绑定队列是一种模糊匹配 # 零个和多个 * 必须有一级
6、参数模式 路由选择headers
使用java代码实现
发布订阅模式的具体实现
类型fanout