Springboot整合RabbitMq,看完这一篇就够了

那么 , 其中比较重要的概念有4个 , 分别为:虚拟主机 , 交换机 , 队列 , 和绑定 。
DirectExchange是RabbitMQ默认的交换机模式 , 也是最简单的模式 , 根据key全文匹配去寻找队列 。
Springboot整合RabbitMq,看完这一篇就够了
文章图片
添加描述
第一个X-Q1就有一个bindingkey , 名字为orange;X-Q2就有2个bindingkey , 名字为black和green 。 当消息中的路由键和这个bindingkey对应上的时候 , 那么就知道了该消息去到哪一个队列中 。
Ps:为什么X到Q2要有black , green , 2个bindingkey呢 , 一个不就行了吗?-这个主要是因为可能又有Q3 , 而Q3只接受black的信息 , 而Q2不仅接受black的信息 , 还接受green的信息 。
根据通配符转发消息到队列 , 在这种交换机下 , 队列和交换机的绑定会定义一种路由模式 , 那么 , 通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息 。
Springboot整合RabbitMq,看完这一篇就够了
文章图片
添加描述
headers也是根据规则匹配,相较于direct和topic固定地使用routing_key,headers则是一个自定义匹配规则的类型.在队列与交换器绑定时,会设定一组键值对规则,消息中也包括一组键值对(headers属性),当这些键值对有一对,或全部匹配时,消息被投送到对应队列.
消息广播的模式 , 也就是我们的发布订阅模式 。 FanoutExchange消息广播的模式 , 不管路由键或者是路由模式 , 会把消息发给绑定给它的全部队列 , 如果配置了routing_key会被忽略 。
消息消费者如何通知Rabbit消息消费成功?
消息通过ACK确认是否被正确接收 , 每个Message都要被确认(acknowledged) , 可以手动去ACK或自动ACK自动确认会在消息发送给消费者后立即确认 , 但存在丢失消息的可能 , 如果消费端消费逻辑抛出异常 , 也就是消费端没有处理成功这条消息 , 那么就相当于丢失了消息如果消息已经被处理 , 但后续代码抛出异常 , 使用Spring进行管理的话消费端业务逻辑会进行回滚 , 这也同样造成了实际意义的消息丢失如果手动确认则当消费者调用ack、nack、reject几种方法进行确认 , 手动确认可以在业务失败后进行一些操作 , 如果消息未被ACK则会发送到下一个消费者如果某个服务忘记ACK了 , 则RabbitMQ不会再发送数据给它 , 因为RabbitMQ认为该服务的处理能力有限ACK机制还可以起到限流作用 , 比如在接收到某条消息时休眠几秒钟消息确认模式有:
如下图:
“P”是我们的生产者 , “C”是我们的消费者 。 中间的框是一个队列-RabbitMQ代表消费者保留的消息缓冲区 。
添加描述
新增SimpleConfig , 创建我们要投放的队列:代码如下
再分别创建消息发送者与消息接收者:
这样就实现了简单的消息发送到指定队列的模式 。 我们写一个测试类
接下来我们创建生产者与消费者
第二个消费者
配置交换机与队列
SpringBoot学习笔记完整笔记文档:(部分截图)
Springboot整合RabbitMq,看完这一篇就够了
文章图片
另外还整理成了40多套PDF文档:全套的Java面试宝典手册 , “性能调优+微服务架构+并发编程+开源框架+分布式”等七大面试专栏 , 包含Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、并发、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached等等 。 如果你对这个感兴趣 , 小编可以免费分享 。
Springboot整合RabbitMq,看完这一篇就够了
文章图片
Springboot整合RabbitMq,看完这一篇就够了】重要的事情说三遍 , 转发+转发+转发 , 一定要记得转发哦!!!