rabbitmq
文章平均质量分 84
LiZhen798
软件研发工程师
语言:Java,Go
展开
-
RabbitMQ 中 Connection 和 Channel 详解
我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection。一旦 TCP 连接建立起来,客户端紧接着可以创建一个 AMQP 信道(Channel),每个信道都会被指派一个唯一的 ID。信道是建立在 Connection 之上的虚拟连接,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成的。我们完全可以使用 Connection 就能完成信道的工作,为什么还要引入信道呢?试想这样一个场景,一个应原创 2022-03-21 14:42:45 · 2763 阅读 · 0 评论 -
深入理解RabbitMQ中的prefetch_count参数
目录prefetch_count参数的含义RabbitMQ客户端中prefetch_count源码跟踪prefetch_count参数使用prefetch_count参数最佳实践小结prefetch_count参数的含义先从AMQP(Advanced Message Queuing Protocol,及高级消息队列协议,RabbitMQ实现了此协议的0-9-1版本的大部分内容)和RabbitMQ的具体实现去理解prefetch_count参数的含义,可以查阅对应的文档(见文末参考原创 2021-12-08 11:39:53 · 3913 阅读 · 0 评论 -
RabbitMQ重试机制
消费端在处理消息过程中可能会报错,此时该如何重新处理消息呢?解决方案有以下两种。 在redis或者数据库中记录重试次数,达到最大重试次数以后消息进入死信队列或者其他队列,再单独针对这些消息进行处理; 使用spring-rabbit中自带的retry功能; 第一种方案我们就不再详细说了,我们主要来看一下第二种方案,老规矩,先上代码:spring: rabbitmq: listener: simple: acknowledge-mode:原创 2021-12-07 19:56:08 · 2962 阅读 · 0 评论 -
RabbitMQ之消息持久化
目录queue的持久化消息的持久化exchange的持久化进一步讨论消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。queue的持久化queue的持久化是通过durable=true来实现的。一般程序中这么使用: Connection connection = connec.转载 2021-12-07 19:42:45 · 2073 阅读 · 0 评论 -
RabbitMQ:消息发送确认 与 消息接收确认(ACK)
默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则会立即发送,当 Message 被消费者正确接收时,就会被从 Queue 中移除消息发送确认发送的消息怎么样才算失败或成功?如何确认?当消息无法路由到队列时,确认消息路由失败。消息成功路由时,当需要发送的队列都发送成功后,进行确认消息,对于持久化队列意味着写入磁盘,对于镜像队列意味着所有镜.转载 2021-12-07 19:32:13 · 646 阅读 · 0 评论 -
RabbitMQ的死信队列详解
死信队列介绍死信队列:DLX,dead-letter-exchange 利用DLX,当消息在一个队列中变成死信 (dead message) 之后,它能被重新publish到另一个Exchange,这个Exchange就是DLX消息变成死信有以下几种情况消息被拒绝(basic.reject / basic.nack),并且requeue = false 消息TTL过期 队列达到最大长度死信处理过程DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何的队列上原创 2021-12-07 17:48:13 · 324 阅读 · 0 评论