(最高版本)rabbitMQ

118 阅读3分钟

设置消息模型,在发消息的时候设置 /** * 发送消息 */ public void sendMessage() { String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String context = "hello!亚索 " + date; logger.info("发送的内容 : " + context); //简单对列的情况下routingKey即为队列名称 this.rabbitTemplate.convertAndSend(simpleQueue, context); }

接收时候的监听:

@RabbitListener(queues = “simpleQueue”) 监听名为simpleQueue的队列 @RabbitHandler 代表此方法为接受到消息后的处理方法**

基本消息模型:生产者–>队列–>一个消费者 2.work消息模型:生产者–>队列–>多个消费者共同消费 3.订阅模型-Fanout:广播,将消息交给所有绑定到交换机的队列,每个消费者都可以收到同一条消息 4.订阅模型-Direct:定向,把消息交给符合指定 rotingKey 的队列(路由模式) 5.订阅模型-Topic:通配符,把消息交给符合routing pattern(主题模式) 的队列

优点:解耦,削峰,异步

耦合的系统间带来的问题:

1、发送的数据,如果对方宕机了,数据会丢失 2、如果增加了其他的的对象,需要额外配置接口 3、如果对方不需要了,我们需要关闭对应的接口

综上就是维护比较麻烦

项目中的使用:

预约挂号可以使用,防止数据丢失,不用每个医院都自己去维护(需要根据不同的医院,到不同医院的服务去消费)(找对应的工作模式)

预约和支付分开,刷新预约的情况,成功的话,再支付

数据推送,使用rabbitmq,防止数据的丢失,方便接口的维护

异步,

虚拟主机,绑定一个服务或者一个模块 创建虚拟主机

生产者daemo

消费者一直监听

常用的工作模型:

1、直连模型

p:消息生成者

c:消费者

q:消息队列

2、任务模型

当生产端产生的数据,消费端无法及时消费,可以增加多个消费者消费队列的消息。 如果一个消费者消费了消息,就不会被重复消费。

3、fanout广播模型

消息的发送流程:

可以有多个消费者;

每个消费者都有自己的队列;

每个队列都有自己的交换机;

生产者发送的消息只能发送到交换机;

交换机决定将数据发送到指定的队列;

交换机把消息发送给绑定的所有队列;

队列的消费者能拿到消息,实现一条消息被多个消费者消费;

路由模式 路由模式的订阅模型

队列于交换机的绑定,不能是任意绑定,而是指定一个routingkey(路由key)

消息的发送方在向exchange发送消息时,也必须指定柔婷key

exchange根据消息的routingkey将数据传到对应的队列

topic订阅模式 topic模式类支持通配符的使用,分配数据到对应的队列

工作队列

实际代码

消费者

通过设置手动确认机制(消费完一条数据后,把这条数据从队列中删除),可以实现消息的不丢失和负载均衡

fanout广播模型

消费者

rout路由模型:

生产者代码

消费者代码

topic模型,在route模式下,多个同配符的使用

多个单词,用点分开

消费者代码

生产者代码

springboot整合rabbitMQ

生产者

队列的相关属性在消费者端设置

工作队列代码编写(work queue)

(基本不用)rabibitmq普通集群:(主要解决了master宕机时,可以对quene消息进行备份),如果消费者消费的时slaver,需要slaver先调master,然后slaver再将值传给消费者

镜像集群 lvs是一个虚拟ip

haproxy:是负载均衡器,负载连接不同的镜像