![](https://img-blog.csdnimg.cn/20190910191957903.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
消息中间件
文章平均质量分 86
消息中间件的相关知识和问题
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 评论 -
分布式事务的几种实现方式
两阶段提交(2PC)两阶段提交协议是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。(1)协议参与者在两阶段提交协议中,系统一般包含两类机器(或节点):一类为协调者(coordinator),通常一个系统中只有一个;另一类为事务参与者(participants,cohorts或workers),一般包含多个,在数据存储系统中可以理解为数据副本的个数。协议中假设每个节点都会记录写前日志(write-ahead log)并持久性存储,即使节点发生故障日志也不会丢失。协议中同时假设原创 2021-03-31 20:15:00 · 1238 阅读 · 0 评论 -
消息队列
一、什么是消息队列以下为虚构的小故事:有一天,产品跑来跟小王说:“我们要做一个用户实名的功能,需要在用户实名成功后给用户发一条短信。”小王(攻城狮level1):“好的,这个需求简单。” ,小王直接调用了XX实名接口,实名成功后,同时调起触达服务给该用户发短信,待短信发送成功后,页面就会响应用户操作成功。没一会功夫,代码写完并测试成功,就发布上线了。线上正常运行了一段时间,产品又匆匆地跑来说:“你做的功能不行啊,客服反馈实名操作响应太慢,已经有好多用户流失了。”小王听得一身冷汗,赶紧.原创 2021-03-25 16:11:09 · 1463 阅读 · 0 评论 -
Kafka 有多个broker的例子
-- Start1. 启动 ZooKeeper首先还是启动 ZooKeeper。 set KAFKA_HOME=D:/0_Shangbo/App/kafka/kafka_2.12-1.1.0 cd %KAFKA_HOME%/bin/windows zookeeper-server-start.bat %KAFKA_HOME%/config/zook...转载 2018-07-13 11:51:57 · 5631 阅读 · 0 评论 -
zookeeper四字命令
ZooKeeper3.4.6支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。 其中stat、srvr、cons三个命令比较类似:"stat"提供服务器统计和客户端连接的一般信息;"srvr"只有服务的统计信息,"cons"提供客户端连接的更加详细的...转载 2018-10-19 11:52:07 · 1116 阅读 · 0 评论