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:不删除

有帮助到你的点赞、收藏和关注一下吧

                                                                         需要更多教程,微信扫码即可

                                                                                 

                                                                                         

                                                        别忘了扫码领资料哦【高清Java学习路线图】

                                                                     和【全套学习视频及配套资料】
 

你可能感兴趣的:(rabbitmq,java,分布式)