- 博客(1084)
- 收藏
- 关注
原创 Rabbitmq Direct Exchange(直连交换机)可以保证消费不被重复消费吗,可以多个消费者,但是需要保证同一个消息,不会被投递给多个消费者
是保证消息只被一个消费者消费的关键,而不是 Exchange 类型。正确绑定队列和消费者,配合业务幂等或锁机制,即可避免重复消费。redis.set(f"processed:{order_id}", "1", ex=3600) # 标记已处理。if redis.set(lock_key, "1", nx=True, ex=10): # 尝试加锁。routing_key="single_queue", # 直连队列(不经过 Exchange),它只影响消息进入哪个队列,不影响队列内消息的分发方式。
2025-07-17 18:28:33
536
原创 Rabbitmq Direct Exchange(直连交换机)多个消费者,配置相同的key ,队列,可以保证只有一个消费者消费吗
arguments={"x-single-active-consumer": True} # 启用单活跃消费者。if redis.set(lock_key, "1", nx=True, ex=60): # 加锁。在 RabbitMQ 中,如果多个消费者(Consumers)同时订阅。可以保证消费不被重复消费,因为通过轮询一个消息只会投递给一个消费者。如果该消费者断开,RabbitMQ 会自动切换到下一个消费者。收到消息1、消息3、消息5...收到消息2、消息4、消息6...将消息分发给不同的消费者,
2025-07-17 18:26:42
534
原创 Rabbitmq direct 模式与 finout区别
Producer → [Direct Exchange] → 匹配 routing_key → 目标队列。exchange="fanout_logs" # 无 routing_key。exchange="fanout_logs" # 无 routing_key。# 队列绑定到 fanout exchange(无需 routing_key)# 队列绑定到 direct exchange,指定 routing_key。例如:用户注册成功后,同时通知邮件服务、短信服务、数据分析服务。
2025-07-17 18:14:24
289
原创 Rabbitmq 多个消费者,怎么保证只有一个消费者消费
在 RabbitMQ 中,如果有多个消费者(Consumers)订阅同一个队列(Queue),默认情况下,消息会以。消费者从 RabbitMQ 获取消息后,先检查 Redis / DB 是否已存在该消息的锁。:消费者处理前先获取分布式锁,确保同一时间只有一个消费者能处理。如果该消费者断开,RabbitMQ 会自动切换到下一个消费者。模式,同一队列同一时间只有一个消费者能接收消息。:让相同特征的消息始终由同一个消费者处理。可扩展多个消费者,但相同分组消息仍串行。仍然只有一个消费者能处理消息,无法并行。
2025-07-17 18:13:25
376
原创 jwt,前置逻辑是什么
在生成 JWT 之前,通常需要经过一系列身份验证(Authentication)和授权(Authorization)的前置逻辑。exp: Math.floor(Date.now() / 1000) + 3600 // 1小时后过期。if (user.isLocked) throw new Error('账户已锁定');验证用户是否有权限访问资源(通常在生成 JWT 时嵌入权限信息)。你的服务器验证此 JWT,并选择是否生成自己的 JWT。这是生成 JWT 的前提条件,确保用户是合法的。
2025-07-17 11:34:31
604
原创 order订单MQ回查失败问题
该问题的核心在于分布式系统中的数据一致性和时序控制。推荐采用"事务后发送MQ+回调重试机制+状态中间表"的组合方案,既能保证系统性能,又能提高数据一致性。对于关键业务场景,可进一步考虑引入分布式事务框架如Seata。
2025-07-17 09:11:01
373
原创 Rocktmq broker 选举机制
角色职责特点Master处理所有读写请求可部署多个,互不依赖Slave从Master同步数据只读备用节点。
2025-07-16 12:30:51
592
原创 Rocketmq 用图说明broker 主从和队列之间关系
Queue均匀分布在不同的Master节点上(例如:Queue 0-1在Master-1,Queue 2-3在Master-2)。:生产者根据NameServer的路由信息,轮询发送到不同Master的Queue。消费者从Master读取消息(默认),或在Master不可用时从Slave读取。消息先写入Master-1的CommitLog,再同步到Slave-1。// 消费者从Master-1(或Slave-1)拉取Queue0的消息。:Queue分布决定消息存储的均匀性(需人工配置均衡)。
2025-07-16 12:28:55
260
原创 mysql 索引失效的场景
最左匹配join字符集函数null @定义字段 not null default ""like字段区分度不大+++++!varchar类型数字型,查询不是字符串查询。
2025-07-15 22:50:30
901
原创 导出内存溢出案例分析
不需要等待整个while循环结束:每次循环迭代完成后,当次的beans数组就可以被回收无需显式设置:现代JVM能很好地处理这种情况。
2025-07-15 19:13:44
870
原创 redis 过期和淘汰策略
maxmemory-samples 5 # 每次检查的 key 数量。:Redis 定期随机抽取部分设置了过期时间的 key 进行检查。:可能存在已过期但未被删除的 key(直到被访问或定期删除触发):从设置了过期时间的 key 中使用 LRU 算法淘汰。:从设置了过期时间的 key 中使用 LFU 算法淘汰。:优先淘汰剩余生存时间 (TTL) 较短的 key。:从所有 key 中使用 LRU 算法淘汰。:从所有 key 中使用 LFU 算法淘汰。:从设置了过期时间的 key 中随机淘汰。
2025-07-15 15:06:58
398
原创 springBoot2.0 升级 springBoot3.0 需要注意什么
Spring Boot 通过简化配置、提供生产就绪功能和丰富的生态系统集成,使开发者能够:更快地构建应用程序减少样板代码轻松创建生产级应用快速响应业务需求变化这些优势使得 Spring Boot 成为现代 Java 应用程序开发的事实标准,特别适合微服务架构和云原生应用的开发。开启新对话。
2025-07-15 14:33:57
347
原创 springboot 好处
Spring Boot 通过简化配置、提供生产就绪功能和丰富的生态系统集成,使开发者能够:更快地构建应用程序减少样板代码轻松创建生产级应用快速响应业务需求变化这些优势使得 Spring Boot 成为现代 Java 应用程序开发的事实标准,特别适合微服务架构和云原生应用的开发。开启新对话。
2025-07-14 22:52:50
918
原创 mysql 与redis缓存一致性,延时双删 和先更新数据库,再删除缓存,哪个方案好
在解决 MySQL 与 Redis 缓存一致性问题时,延时双删和先更新数据库再删除缓存是两种常见方案。下面我将从原理、优缺点、适用场景等方面进行详细对比。
2025-07-14 21:56:55
623
1
原创 幻想读 通过多版本并发控制(MVCC)和间隙锁(Gap Lock)的组合也能防止幻读具体说下
InnoDB 在级别防止幻读的完整机制是:普通 SELECT 使用 MVCC 实现快照读加锁的 SELECT (FOR UPDATE) 和写操作使用 next-key 锁next-key 锁(记录锁+间隙锁)阻塞其他事务在查询范围内的插入保证事务期间查询范围的稳定性这种组合既保证了读取性能(非阻塞读),又通过精细的锁定机制解决了幻读问题,是 InnoDB 设计的一大亮点。
2025-07-14 19:19:01
790
原创 怎么解决数据库幻读问题
幻读是数据库并发控制中的一个问题,指在同一事务内,连续执行两次相同的查询,第二次查询看到了第一次查询没有看到的行("幻影行")。这与不可重复读不同,后者关注的是同一行数据的变更。
2025-07-14 19:16:16
171
原创 Hystrix 原理详解
Hystrix 通过隔离+熔断+降级三位一体的机制保护系统:线程池隔离避免资源耗尽熔断器快速切断故障依赖降级逻辑保证基本可用性尽管目前已停止维护,但其设计思想仍是分布式容错的经典范式。
2025-07-14 14:11:39
806
原创 innodb为什么支持事务
日志先行(Redo/Undo Log)保证原子性和持久性。MVCC+锁实现隔离性。行级锁减少并发冲突。这些设计使其成为 MySQL 中事务型业务的首选引擎。
2025-07-14 13:55:56
799
原创 Elasticsearch 使用分片路由算法确定文档应该写入哪个主分片。 具体如何实现的
局部性优化:将同一用户的文档存储在同一分片,提升查询效率。json避免热点:若默认_id导致数据倾斜,可通过业务键(如时间戳+ID)分散负载。Elasticsearch 的分片路由算法通过哈希取模实现简单高效的数据分布,兼具确定性和扩展性。理解其机制有助于优化索引设计和查询性能。
2025-07-14 13:44:19
319
原创 java 一个无事物方法,调用另外一个有事物方法,事物回生效吗
/ 直接调用,事务不生效(如果通过 this 调用)System.out.println("现在是非事务方法升级为事务方法");System.out.println("非事务方法调用事务方法");System.out.println("非事务方法调用事务方法");System.out.println("非事务方法调用事务方法");System.out.println("执行事务方法");System.out.println("执行事务方法");System.out.println("执行事务方法");
2025-07-14 12:07:25
713
原创 一个大方法拆分成很多小方法,通常怎么加注解的,不是每个方法都需要加注解
private void deductInventory(Order order) { ... } // 无事务。private void createPayment(Order order) { ... } // 无事务。private void saveOrder(Order order) { ... } // 无事务。private void validate(Order order) { ... } // 无事务。// 创建支付(无需单独事务)
2025-07-14 12:06:09
665
原创 事物生效,订单类内部更新订单
代码如下以下代码1不生效,2生效解决方案1,外层方法加注解,内层不加2,不要拆分方法,把更新订单操作放在带事物的大方法中3,拆方法(内部),注入自己,用代理对象调用4,拆方法(单独bean)5,使用编程性事物@Autowired。
2025-07-14 12:05:35
825
原创 中断锁 含义
/ 必须手动释放锁。// 2秒后任务被中断。通过合理使用中断锁,可以避免线程无限阻塞,提升系统的可控性!可中断锁的性能略低于普通锁,仅在需要响应中断时使用。允许线程在等待锁时响应外部中断,提高程序的健壮性。// 2秒后中断任务。// 线程被中断时的处理。
2025-07-13 12:35:41
399
原创 多线程死锁
死锁是并发编程中的难点,但通过合理设计和工具辅助,可以有效避免和解决!存在一个线程的循环等待链,每个线程都在等待下一个线程占用的资源。已分配给线程的资源不能被其他线程强制夺取,必须由线程主动释放。以下是死锁的核心概念、产生条件、排查方法和解决方案。线程持有至少一个资源,同时等待获取其他被占用的资源。资源一次只能被一个线程占用(如锁、文件句柄等)。(如一个同步方法调用另一个同步方法)。互斥:一个资源,只能被一个线程持有。支持可中断锁、公平锁、尝试锁等。支持可中断锁、公平锁、尝试锁等。
2025-07-13 12:34:47
498
原创 liunx命令
文件:ls cd cd.. mkdir rm -f touch mv cp 挂载。网络:ping infconfig ssh。日志查找 tail cat grep。压缩:zip tar。
2025-07-13 12:10:24
141
原创 与第三方系统对接,需要注意什么
交互方式:restfulapi ESB webservice安全:token及签名,敏感数据加密,幂等熔断限流:耗时熔断,限流QPS接口性能:批量,分批幂等:多线程异步处理日志记录++异常处理:响应码,异常码重试机制联调数据准确性,实时性技术文档---------
2025-07-10 11:27:32
314
原创 线程池参数设置多大
场景5000个在途运单数据,需要调用第三方接口。查询车联网数据,每次只能单条查询。我用compateFuere,进行多线程异步查询,服务配置4C8G,请问线程池参数怎么配置合理。
2025-07-10 11:08:00
483
原创 分布式ID 与自增区别
根据业务需求合理选择ID生成策略,在分布式环境下通常优先考虑分布式ID方案,但在特定场景下自增ID仍具有不可替代的优势。[类型前缀(2位)][时间戳(32位)][自增序列(20位)][机器ID(10位)]:水平扩展时需考虑分库分表后的ID冲突。-- 实例2分配100万-200万。需要隐藏业务量的场景(安全考虑)-- PostgreSQL序列。// 使用递增计数器+机器ID。高并发写入需求(如电商下单)-- 实例1分配1-100万。-- 采用分段分配策略。:各节点独立生成ID。-- MySQL实现。
2025-07-10 11:04:58
876
原创 分布式ID 与自增区别
根据业务需求合理选择ID生成策略,在分布式环境下通常优先考虑分布式ID方案,但在特定场景下自增ID仍具有不可替代的优势。[类型前缀(2位)][时间戳(32位)][自增序列(20位)][机器ID(10位)]:水平扩展时需考虑分库分表后的ID冲突。-- 实例2分配100万-200万。需要隐藏业务量的场景(安全考虑)-- PostgreSQL序列。// 使用递增计数器+机器ID。高并发写入需求(如电商下单)-- 实例1分配1-100万。-- 采用分段分配策略。:各节点独立生成ID。-- MySQL实现。
2025-07-10 10:12:23
394
原创 java 如何依赖,sdk中的类,正常扫描是扫描不到的
当您的 Java 项目依赖某个 SDK 中的类,但正常组件扫描无法识别时,这个问题通常与类加载机制或 Spring 的组件扫描范围有关。
2025-07-10 09:59:11
477
原创 xxl-job 分片
XXL-Job的分片是针对将待处理的划分为多个子集例如:100万条数据分成4片,每片处理25万条将中的节点编号例如:4个执行器实例分别获得分片序号0、1、2、3。
2025-07-10 00:46:58
200
原创 xxl-job处理100万数据及分片疑问
不需要定义4个独立Job。XXL-Job的分片广播机制可以让你只定义一个Job,系统会自动将任务分发给4个执行器并行执行。
2025-07-10 00:46:56
694
原创 xxljob
执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;针对上述情况,可以通过结合 “单机路由策略(如:第一台、一致性哈希)” + “阻塞策略(如:单机串行、丢弃后续调度)” 来规避,最终避免任务重复执行。XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个执行器是串行执行的。
2025-07-10 00:29:56
714
原创 mq重复消费具体场景及解决方案
2,消费端,同上,网络,ack,未发送到broker。1,生产 网络原因,发到broker 未返回确认。使用Redis等缓存记录已处理消息。利用数据库唯一约束(如订单ID)
2025-07-08 22:59:26
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人