RabbitMQ 生产者确认(待深入)

在使用RabbitMQ的时候,可以通过消息持久化操作来解决因为服务器的异常崩溃而导致的消息丢失,除此之外,当消息的生产者将消息发送出去之后,消息到底有没有正确地到达服务器?默认情况下发送信息的操作是不返回给生产者任何信息的,也就是默认情况下生产者是不知道消息有没有正确到达服务器。
RabbitMQ针对如果在消息到达服务器之前已经丢失这个问题提供了两种解决方案。

  • 通过事务机制
  • 通过发送方确认机制

事务机制

RabbitMQ与事务相关的方法:

channel.txSelect(): 将当前信道设置成事务模式
channel.txCommit(): 用于提交事务
channel.txRollback(): 用于回滚事务

通过事务实现机制,只有消息成功被rabbitmq服务器接收,事务才能提交成功,否则便可在捕获异常之后进行回滚,然后进行消息重发,但是事务非常影响rabbitmq的性能。还有就是事务机制是阻塞的过程,只有等待服务器回应之后才会处理下一条消息

发送方确认机制

生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在该信道上面发布的消息都会被指派一个唯一的id(从1开始),一旦消息被投递到匹配的队列之后,rabbitmq就会发送一个确认(Basic.Ack)和deliverTag(消息id)给生产者。如果消息和队列是持久化的那么消息会在持久化之后被发出。rabbitmq除了回传deliverTag之外,还有multiple参数,表示到这个序号之前所有的消息都得到了处理。所有的消息只会被Ack或Nack一次,不会出现既被Ack又被Nack

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RabbitMQ是一个开源的消息代理软件,它实现了高级消息队列协议(AMQP)标准。它被广泛应用于分布式系统中,用于实现异步通信和解耦消息的发送和接收。下面是一些深入了解RabbitMQ的关键点: 1. 消息代理模式:RabbitMQ采用了消息代理模式,通过中间代理来接收、存储和转发消息生产者消息发送给RabbitMQ,然后RabbitMQ消息传递给消费者。 2. 消息队列RabbitMQ中的消息通过队列进行传递和存储。生产者消息发送到队列中,消费者从队列中获取消息进行处理。这种方式实现了生产者和消费者的解耦,使得它们可以独立地进行操作。 3. 交换机和绑定:在RabbitMQ中,生产者消息发送到交换机,然后交换机根据规则将消息路由到一个或多个队列中。队列通过绑定与交换机进行关联,指定消息的路由规则。 4. 消费者确认和持久化:消费者从队列中获取消息后,可以通过发送确认消息RabbitMQ来告知其已成功接收和处理消息。同时,消息也可以进行持久化,确保即使在RabbitMQ宕机后,消息也不会丢失。 5. 路由策略:RabbitMQ提供了多种路由策略,如直接路由、主题路由和扇出路由等。这些策略可以根据消息的标签(routing key)来决定将消息发送到哪些队列中。 6. 高可用性和扩展性:RabbitMQ支持集群和镜像队列,可以实现高可用性和负载均衡。通过水平扩展和分布式部署,可以处理大量的消息和高并发请求。 以上是对RabbitMQ的一些深入介绍,希望能够帮助你更好地理解和使用它。如果你有进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Energet!c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值