rabbitMQ
认识mq
本地安装MQ
二:消息 队列 虚拟机
三:spring驱动模型 在spring boot项目中驱动MQ
四:实战
画龙点睛的元素 优化性能问题
低延迟
系统不健康指的是,在高并发下系统崩掉了,无法恢复.
解决高并发下的限流, 延迟队列
Spring事件驱动模型:发消息
###引用场景###
异步通信
异步解耦
RabbitMQ
业务逻辑实现解耦-------低延迟
高并发实现延迟队列------限流
Spring事件驱动模型
Spring内置:ApplicationEvent 和ApplicationListener
事件:消息(封装好的对象*String*javabeen) 继承ApplicationEvent
Spring自带 内置的和Mq功能差不多的一个模型
[main线程]
ApplicationPublisher发送器----生产者(IOC容器)--绑定---> ApplicationEvent**事件----消息--到-->
[main线程的子线程进行消费]
ApplicationListener**监听器-------消费者
[需求:将用户登录成功后的相关信息封装成实体对象,由生产者采用异步的方式发送给消费者]
@Async开启异步注解
Linux下启动RabbitMq的命令:systemctl start rabbitmq-server
重启命令:systemctl restart rabbitmq-server
停止服务:systemctl stop rabbitmq-server
6.路由器:是一个秘钥,不能单独使用而是和交换机绑定在一起.
MQ消息模型三大基本组成:队列,交换机,路由器
交换机
Producer生产者 消息 消息 队列 被消费者监听 Direct
路由器
rabbitMq中(work)模型能者多劳
第三种模型(fanout)扇出 也称为广播
第四种模型(Routing)
在Fanout模式中(广播),一条消息,会被所有订阅的队列都消费.但是,在某些场景下,我们希望不同的消息被不同的队列消费,这时就要用到Direct类型的Exchange.
Direct类型的Exchange.可以指定不同的消息被不同的队列消费.
第五种称为动态路由
RAbbitMQ的集群
集群架构
普通集群
架构图
核心解决问题:当集群中某一时刻master节点怠机,可以对quene中信息,进行备份
镜像集群
镜像队列机制就是将队列在三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升MQ集群的整体高可用性.
启动集群中中的rabbitmq:rabbitmq-server -detached
停止:rabbitmqctl stop_app
加入集群:rabbitmqctl join_cluster rabbit@mq1
启动:rabbitmqctl start_app
执行:rabbitmqctl cluster_status
以上是正确的用户名密码模式,不然会报错.
镜像集群======高可用
多个策越对应同一个队列,优先级数字越大,优先级越高.
查看策略:rabbitmqctl list_policies
#2.添加策略
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'