初识RabbitMQ

rabbitMQ启动
rabbitmq-server -detached  	#开启
rabbitmqctl stop
交换机类型
直接交换机

directExchanger 由routingKey指定将消息发送到哪个队列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiIGt1jn-1675263962989)(null)]

扇出交换机

fanoutExchange 广播,不需要指定routingKey,交换机将消息发送给所有与之绑定的队列

主题交换机

topicExchange 主题交换机,对路由键进行模式匹配,交换机只将消息发送给匹配的队列

头交换机

headerExchange 头交换机,用的不多

延迟队列
基于死信的延迟队列

是死信队列的一种,是指发送ttl消息时,只有在消息过期时才处理,当达到ttl时间后,将消息放入死信队列进行处理,这就是延迟队列。

不使用插件的延迟队列有一种问题,因为是队列,先进先出,只有在队头的消息mq才会检查这个消息是否过期,选择是否放入死信队列,如果队头消息ttl特别长,队中消息ttl较短时,也无法先处理队中元素。

基于插件的延迟队列

在rabbitmq下plugins包中下载插件后,交换机多出来一种类型(“x-delayed-message”),跟基于死信不同的是,基于插件的延迟队列在交换机中完成延迟排序,在交换机中,将延迟时间到期的消息发送到队列中,消费者可直接进行消费。基于死信的是所以消息在队列中才进行延迟判断,这样会有缺陷。

发布确认高级

是指生产者发送一条消息后,如果交换机或者队列发生错误时,这条消息会被丢弃,添加配置文件后,发送消息交换机都会确认这条消息是否被接收,通过confirmCallback来确认消息是否被交换机接收,当队列或路由key错误时,不会提示,需要通过returnsCallback来获取未发送消息的信息

#当属性为correlated时发送消息时会触发消息回调函数 ConfirmCallback
#CORRELATED值是发布消息成功到交换器后会触发回调方法
spring.rabbitmq.publisher-confirm-type=correlated
#当属性为true时,当消息发送失败,会触发returnsCallback回调函数,参数包括消息的各种信息
spring.rabbitmq.publisher-returns=true
消息重复消费
1.唯一id + 指纹码机制

就是拼接一个唯一id存在数据库中,查询判断是否重复,劣势是高并发下频繁访问数据库,会有写入性能瓶颈,可以分库分表

2.redis原子性

利用redis的setnx,天然具有幂等性,不会重复消费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值