源码
文章平均质量分 73
伍六七AI编程
伍六七AI编程
展开
-
什么情况?DDD 中的每个任务都执行了两次?
最近在使用 COLA 框架自带的异步任务时,发现每次执行异步都执行了两次,如果一些没有做幂等的接口,这样是会有问题的,比如入库操作之类的,就会造成数据重复入库,造成严重 bug。带着疑惑,开始了 bug 之旅。原创 2024-01-09 13:15:46 · 388 阅读 · 0 评论 -
提升微服务稳定性与性能:深入剖析Netflix Hystrix框架
com.netflix.hystrix.HystrixCommand 是 Netflix Hystrix 框架中的核心类,用于实现服务的容错和熔断功能。它通过封装远程服务调用,提供容错处理、熔断机制和监控统计等功能,适用于微服务架构和高并发场景。通过使用 HystrixCommand,可以提高系统的可用性、稳定性和性能。原创 2023-10-16 11:45:00 · 334 阅读 · 1 评论 -
google Guava包RateLimiter使用最佳实践
如果您使用的是非阻塞的逻辑,并且需要根据RateLimiter的许可证可用性做出决策,则可以使用tryAcquire()方法来尝试获取许可证。Resilience4j 是一款支持多种限流和熔断策略的开源库,支持QPS、线程池、超时、重试等熔断和限流策略,可以帮助开发人员轻松实现应用程序的可靠性和弹性。在创建RateLimiter对象时,建议使用静态工厂方法来创建,因为它提供了更清晰的API,并且允许您使用不同的参数值来创建RateLimiter对象。该方法用于获取指定数量的许可证,并返回等待的时间。原创 2023-04-14 16:18:10 · 730 阅读 · 0 评论 -
借助Redis Bitmap实现简单的布隆过滤器
要初始化一个布隆过滤器的话,需要两个参数:预估的元素数量,以及可接受的最大误差(即假阳性率)。Bitmap在Redis中并不是一个单独的数据类型,而是由字符串类型(Redis内部称Simple Dynamic String,SDS)之上定义的与比特相关的操作实现的,此时SDS就被当做位数组了。另外,setbit指令不会重置对应Key的过期时间戳。Redis提供的Bitmap正好能够作为布隆过滤器所需要的位数组的基础,本文先简要介绍Bitmap,然后给出基于它的布隆过滤器实现。转载 2023-03-08 15:20:22 · 715 阅读 · 0 评论 -
Java调用外部REST请求的几种方式
1 restTemplate — spring 提供特点:1、RestOperations 提供了各种封装方法,非常方便直接将返回转成实体类。2、默认使用JDK 的HttpURLConnection进行通信,但是可以通过RestTemplate.setRequestFactory 切换到不同的HTTP源:如Apache HttpComponents、Netty、OkHttp。3、支持同步、异步请求;4、支持更多的定制,比如拦截器等。ps:支持 get 请求,参数是 body 的形式。参考:ht原创 2021-08-17 16:39:46 · 1232 阅读 · 0 评论 -
COLA异步任务重复执行?
最近在使用COLA框架自带的异步任务时,发现每次执行异步都执行了两次,如果一些没有做幂等的接口,这样是会有问题的,比如入库操作之类的,就会造成数据重复入库,造成严重bug。带着疑惑,开始了 bug 之旅。1 问题发现1、首先排查执行入口,是不是有两个,发现只有一个;2、调用入口的问题?直接通过controller调用handler,还是调用了两次。3、简化代码,把handler内的内容都删掉,只有一个logger打印语句?结果还是打印了两次。但是这次,发现logger的线程名不一样,是两个线程。原创 2021-07-26 14:28:35 · 422 阅读 · 1 评论 -
一个HashMap源码问题
一个问题Map<Integer, Integer> map = new HashMap<>();resMap.put(1, 1);System.out.println(map.get(1L));System.out.println(map.get(1));大家可以看下,上面的代码输出是什么?我稍后公布答案。源码分析HashMap的get方法源码如下(增加自己的注释):public V get(Object key) { Node<K,V> e;原创 2021-06-16 09:23:53 · 332 阅读 · 0 评论 -
Nacos源码之一-配置自动更新(重写)
Nacos 是阿里巴巴开源的集分布式配置中心、分布式注册中心为一体的分布式解决方案。它的优点:提供命令空间,方便管理不同环境的配置;提供web界面,方便管理配置和服务;支持配置版本管理,回滚;支持服务管理,手动上线、下线服务。等等其他优点。1 如何使用 Nacos 自动更新配置1.1 配置自动更新的两种方式第一种方式属性使用@Value注解类使用@RefreshScope 注解@RefreshScope@RequestMapping("config")public原创 2021-05-28 09:19:12 · 1418 阅读 · 2 评论 -
Nacos源码之三—接口读取配置
读取配置流程1、入口在ConfigController::getConfig()方法中;2、获取读锁,如果获取成功,进行下一步,否则返回失败(小于表示正在写入(写锁),等于0表示没有配置数据,因为读锁可以重复获取);3、根据groupKey获取缓存中的基础信息(isBeta,configType等信息);4、根据部署方式(是否standalone)、使用的数据库是否是内置数据库 derby,来判断是否读数据库还是读文件;5、返回数据库中的content信息(如果是查数据库),或者文件流内容。需原创 2021-05-21 09:25:59 · 1243 阅读 · 0 评论 -
Nacos源码之二——阅读源码第一步, 本地启动 Nacos
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。本文链接: http://blog.shiyi.online/articles/2019/08/20/1566289182119.html前言在我们去阅读 Nacos 源码之前,我们得先了解 Nacos 是干嘛的,以及怎么用,这样有利于我们更容易去理解源码;查看 Nacos 的官方文档,我们知道 Naocs 主要有一下特性:配置中心 服务注册与发现 ...Nacos 有给我转载 2021-05-18 11:16:44 · 447 阅读 · 0 评论 -
java多线程学习之四—CompletableFuture源码分析以及例子实证
CompletableFuture介绍默认情况下 CompletableFuture 会使用公共的 ForkJoinPool 线程池,这个线程池默认创建的线程数是 CPU 的核数(也可以通过 JVM option:-Djava.util.concurrent.ForkJoinPool.common.parallelism 来设置 ForkJoinPool 线程池的线程数)。但是也不一定就使用ForkJoinPool,要看(cpu的核数-1)是否大于1,如果大于1,使用过 ForkJoinPool,否原创 2021-01-08 10:41:42 · 478 阅读 · 0 评论 -
Nacos源码之一-怎么更新配置
界面操作更新nacos配置,然后使用charles抓包工具,抓到请求http://ip:port/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTE2Nzc5N30.NNcnIivPaMxj3me9FfKY2VHaWnJNVA6GganyWenR6NU下载源码https://github.com/alibaba/nacos找到请求:nacos/v1/cs/configs原创 2020-12-22 10:41:49 · 680 阅读 · 0 评论