- 博客(26)
- 收藏
- 关注
原创 RabbitMQ是如何解决消息堆积问题的?
当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息到达上限。解决消息堆积问题通常有这样几种方案。
2025-12-03 08:58:19
207
原创 java中“synchronized” 和 “volatile” 的区别是什么?
是涉及到JVM调优的关键字,仅能实现变量的修改可见性,不能保证原子性。当线程不断地从内存获取某个变量的值,且这个变量的值又从来都不改变时,JVM为了增加性能就启动调优机制。生成这个变量的副本保存在线程在的栈内存。让线程直接从他自己的栈内存获取此变量的值。调优之后,若原变量的值被修改了,但线程还是获取副本的值。让线程无论获取多少次没有改变的变量的值,都得从内存中访问。volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;
2025-11-21 09:48:54
271
原创 使用Telegraf采集Emqx数据注入InfluxDB
介绍了Telegraf采集Emqx数据的主要配置,实现了使用Telegraf采集Emqx数据注入InfluxDB
2025-02-28 15:09:35
1012
1
原创 Java连接Emqx实现普通消息、保留消息、遗嘱消息的订阅与发布(附源码)
使用springBoot、Emqx、MQTTX实现MQTT协议的消息发布与订阅。
2025-02-26 17:14:20
2266
1
原创 Spring-Cache中@CacheConfig与@Cacheable的作用与区别
本文主要记录@CacheConfig注解里的cacheNames属性与@Cacheable注解里的key属性的区别,以前只知道cacheNames是缓存的名称,key是缓存的键,但是并不知道这两个有什么区别。是一个类级别的注解,用于声明该类中所有缓存操作共享的一些通用配置。比如缓存名称和键生成策略等。cacheNames属性用于指定缓存的名称。在 Spring 缓存中,缓存名称用于标识特定的缓存区域。一个应用程序可以有多个缓存区域,每个区域可以有自己的缓存策略(如过期时间、缓存大小等)。
2024-11-22 09:42:52
582
2
原创 解决Sentinel与Seata合用导致@GlobalTransactional(rollbackFor = Exception.class)失效
在微服务架构的电商项目中,我写了关于交易的业务,总的逻辑就是,先查询商品信息,然后再计算价格生成订单信息,然后清除购物车商品,最后扣减库存。由于这些业务逻辑分布在不同的服务模块之下,所以我使用了Feign接口调用,为了加快接口响应速度我又使用Sentinel写了降级逻辑。因为涉及到多表操作,为了保证数据一致性我又使用了Seata做了分布式事务,可以看到我在实现层方法上使用了@GlobalTransactional注解去捕捉Exception异常进行回滚,在进行事务操作的时候我们一般都会捕捉这个最大的异常。
2024-09-10 11:10:42
1001
原创 以若依为例,解决Spring Boot项目,多数据源情况下mybatis驼峰下划线转换失效
解决Spring Boot项目中mybatis驼峰下划线转换失效
2024-06-23 16:56:33
2811
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅