标签:交换器 方式 队列 rabbitmq queue 三种 Rabbitmq 路由 消息
Direct交换器
是一种点对点,实现发布/订阅标准的交换器。Producer发送消息到RabbitMQ中,MQ中的Direct交换器接受到消息后,会根据Routing Key来决定这个消息要发送到哪一个队列中。Consumer则负责注册一个队列监听器,来监听队列的状态,当队列状态发生变化时,消费消息。注册队列监听需要提供交换器信息,队列信息和路由键信息。
这种交换器通常用于点对点消息传输的业务模型中。如电子邮箱。
producer全局配置文件
spring.application.name=direct-producer
# 必要配置
# 配置rabbitmq链接相关信息。key都是固定的。是springboot要求的。
# rabbitmq安装位置
spring.rabbitmq.host=192.168.1.29
# rabbitmq的端口
spring.rabbitmq.port=5672
# rabbitmq的用户名
spring.rabbitmq.username=xxf
# rabbitmq的用户密码
spring.rabbitmq.password=123456
# 可选配置
# 配置producer中操作的Queue和Exchange相关信息的。key是自定义的。为了避免硬编码。
# exchange的命名。交换器名称可以随意定义。
mq.config.exchange=log.direct
# 路由键, 是定义某一个路由键。 info级别日志使用的queue的路由键。
mq.config.queue.info.routing.key=log.info.routing.key
# 路由键,error级别日志使用的queue的路由键。
mq.config.queue.error.routing.key=log.error.routing.key
Consumer全局配置
spring.application.name=direct-consumer
server.port=8081
spring.rabbitmq.host=192.168.1.29
spring.rabbitmq.port=5672
spring.rabbitmq.username=xxf
spring.rabbitmq.password=123456
# 自定义配置。 配置交换器exchange、路由键routing-key、队列名称 queue name
# 交换器名称
mq.config.exchange=log.direct
# info级别queue的名称
mq.config.queue.info=http://log.info
# info级别的路由键
mq.config.queue.info.routing.key=log.info.routing.key
# error级别queue的名称
mq.config.queue.error=log.error
# error级别的路由键
mq.config.queue.error.routing.key=log.error.routing.key
Topic交换器
主题交换器,也称为规则匹配交换器。是通过自定义的模糊匹配规则来决定消息存储在哪些队列中。当Producer发送消息到RabbitMQ中时,MQ中的交换器会根据路由键来决定消息应该发送到哪些队列中。Consumer同样是注册一个监听器到队列,监听队列状态,当队列状态发生变化时,消费消息。注册监听器需要提供交换器信息,队列信息和路由键信息。
Fanout交换器
广播交换器。这种交换器会将接收到的消息发送给绑定的所有队列中。当Producer发送消息到RabbitMQ时,交换器会将消息发送到已绑定的所有队列中,这个过程交换器不会尝试匹配路由键,所以消息中不需要提供路由键信息。Consumer仍旧注册监听器到队列,监听队列状态,当队列状态发生变化,消费消息。注册监听器需要提供交换器信息和队列信息。
RabbitMQ消息可靠性处理
前面内容,如果consumer未启动,而producer发送了消息。则消息会丢失。
如果consumer先启动,创建queue后,producer发送消息可以正常消费。那么当所有的consumer宕机的时候,queue会auto-delete,消息仍旧会丢失。
这种情况,消息不可靠。有丢失的可能。
Rabbitmq的消息可靠性处理,分为两部分。
1 - 消息不丢失。当consumer全部宕机后,消息不能丢失。 持久化解决
2 - 消息不会错误消费。当consumer获取消息后,万一consumer在消费消息的过程中发生了异常,如果rabbitmq一旦发送消息给consumer后立刻删除消息,也会有消息丢失的可能。 确认机制解决
消息持久化
@Queue注解中的属性 - autoDelete:当所有消费客户端连接断开后,是否自动删除队列 。true:删除 false:不删除
@Exchange注解中的属性 - autoDelete:当交换器所有的绑定队列都不再使用时,是否自动删除交换器。true:删除 false:不删除
有帮助到你的点赞、收藏和关注一下吧
需要更多教程,微信扫码即可
标签:交换器,方式,队列,rabbitmq,queue,三种,Rabbitmq,路由,消息 来源: https://blog.csdn.net/qfzhaohan/article/details/122063989
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。