Java
使用 Flomesh 进行 Dubbo 服务治理
写在最前 和上一篇《使用 Flomesh 强化 Spring Cloud 服务治理》一样,这次同样是在无代码侵入的情况下对 Dubbo 服务治理的提升。 更多治理场景陆续添加中, …
使用 Flomesh 强化 Spring Cloud 服务治理
写在最前 这篇是关于如何使用 Flomesh 服务网格来强化 Spring Cloud 的服务治理能力,降低 Spring Cloud 微服务架构落地服务网格的门槛,实现“自主可控”。 文档在 github 上持续更新,欢迎大家一起讨 …
使用 Quarkus 和 MicroProfile 实现微服务特性
Quarkus 的文章之前写过三篇了,讲过了 Quarkus 的小而快。 Hello, Quarkus 应"云"而生的 Java 框架 Quarkus:构建本机可执行文件 谁说 Java …
Quarkus:谁说 Java 不能用来跑 Serverless?
想到这个标题的时候,我第一时间想到的就是星爷的《唐伯虎点秋香》的这一幕。 当讨论起世界上最好的开发语言是什么的时候,Java 的粉丝们总会遇到这种场景: 吹:“Java 语法简单,容易上手!” 黑:“Java 启动慢,性能差,耗资源!” …
应“云”而生的 Java 框架:构建本机可执行文件
电影《功夫》中,火云邪神有句话:“天下武功无坚不摧,唯快不破。” 在 上一篇文章 中,我们写了第一个 Quarkus 应用,并尝试着构建了 legacy-jar 和 fast-jar。 今天来看一下 Quarkus 构建出来的本机可执行文件 …
应“云”而生的 Java 框架:Hello, Quarkus
Wikipedia上有关 Quarkus 的信息还很少,只有一句简单的介绍: Quarkus 是专为 OpenJDK HotSpot 和 GraalVM 定制的全栈 Kubernetes 原生 Java 应用程序框架。与如 Spring 之 …
带你了解 Ribbon 负载均衡器的实现
Spring Cloud 中 Ribbon有在 Zuul 和 Feign 中使用,当然也可以通过在RestTemplate的 bean 定义上添加@LoadBalanced注解方式获得一个带有负载均衡更能的RestTemplate。 不过实 …
Java 中的 Mysql 时区问题
(Photo by Andrea Piacquadio from Pexels) 话说工作十多年,mysql 还真没用几年。起初是外企银行,无法直接接触到 DB;后来一直从事架构方面,也多是解决问题为主。 这次搭建海外机房,围绕时区大家做了 …
加速云原生的 Java 开发
今天来说说日常在Kubernetes开发Java项目遇到的问题. 当我们新建一个项目的时候, 总是面临需要新建manifest, 平时都是copy+paste+modify. 能否以变成的方式来生成? 开发时的步骤也比较繁琐: docker …
Spring Boot 2.2.0 发布
译自: https://spring.io/blog/2019/10/16/spring-boot-2-2-0 组件升级 Spring AMQP 2.2 Spring Batch 4.2 Spring Data Moore Spring …
如何选择Kafka Topic的分区数
在kafka中, topic的分区是并行计算的单元. 在producer端和broker端, 可以同时并发的写数据到不同的分区中. 在consumer端, Kafka总是将某个分区分配个一个consumer线程. 因此同一个消费组内的并行度 …
Spring Boot源码分析 - Configuration注解
@Configuration注解 @Configuration注解指示一个类声明一个或多个@Bean方法, 并且可以由Spring容器处理, 以在运行时为这些bean生成bean定义和服务请求. 使 …
Zuul网关Ribbon重试
相关配置 #如果路由转发请求发生超时(连接超时或处理超时), 只要超时时间的设置小于Hystrix的命令超时时间,那么它就会自动发起重试. 默认为false. 或者对指定响应状态码进行重试 zuul.retryable = true …
Hystrix工作原理三
异常处理 Hystrix异常类型 HystrixRuntimeException HystrixBadRequestException HystrixTimeoutException RejectedExecutionException …
Hystrix工作原理二
隔离策略 线程和线程池 客户端(库, 网络调用等)在各自的线程上运行. 这种做法将他们与调用线程隔开, 因此调用者可以从一个耗时的依赖调用"离开(walk away)" Hystrix使用单独的, 每个依赖的线程池作为约 …
Hystrix工作原理一
运行时的流程图 构建HystrixCommand或者HystrixObservableCommand对象 第一步是构建一个HystrixCommand或HystrixObservableCommand对象来代表对依赖服务所做的请求。 将在请 …
初识 Netflix Zuul
嵌入式的zuul代理
使用了Netfilx OSS的其他组件:
- Hystrix 熔断
- Ribbon 负责发送外出请求的客户端, 提供软件负载均衡功能
- Trubine 实时地聚合细粒度的metrics数据
- Archaius …
ConfigurationProperties到底需不需要getter
为什么要讨论这个问题, 工作中一个同事写的类使用了ConfigurationProperties, 只提供了标准的setter方法. 属性的访问, 提供了定制的方法. 可以参考EurekaClientConfigBean. 他使用的 …
SpringBoot源码 - 启动
SpringBoot Application启动部分的源码阅读. SpringApplication 常用的SpringApplication.run(Class, Args)启动Spring应用, 创建或者更 …
Java序列化工具性能对比
最近在调整系统的性能, 系统中正使用Jackson作为序列化工具. 做了下与fastJson, Avro, ProtoStuff的序列化吞吐对比. 由于只是做横向对比, 没有优化系统或者JVM任何参数. 服务器一般都用Linux, …
Spring Cloud - Eureka Client源码分析
准备做个Spring Cloud源码分析系列, 作为Spring Cloud的源码分析笔记. 这一篇是Eureka的客户端. 客户端 两种方式, 最终的实现基本一样. 显示指定服务发现的实现类型 使用@EnableEurekaClient注 …
Kafka发送不同确认方式的性能差异
背景 Kafka的性能众所周知,Producer支持acknowledge模式。即Kafka会想Producer返回消息发送的结果。但是在Java Client中,acknowledge的确认有两种:同步和异步。 同步是通过调 …
Kafka 恰好一次发送和事务消费示例
核心思想 生产端一致性: 开启幂等和事务, 包含重试, 发送确认, 同一个连接的最大未确认请求数. 消费端一致性: 通过设置读已提交的数据和同时处理完成每一条消息之后手动提交offset. 生产端 public class …
Kafka Producer配置解读
按照重要性分类, 基于版本0.11.0.0 高 bootstrap.servers 一组host和port用于初始化连接. 不管这里配置了多少台server, 都只是用作发现整个集群全部server信息. 这个配置不需要包含集群所有的机器信 …
JSON Patch
JSON Path是在使用Kubernetes API的过程中首次使用的. 使用API做扩缩容的时候, 发送整个Deployment的全文不是个明智的做法, 虽然可行. 因此便使用了JSON Patch. JsonObject item = …
暴力停止ExecutorService的线程
停止,stop,这里说的是真的停止。如何优雅的结束,这里就不提了。 这里要用Thread.stop()。众所周知,stop()方法在JDK中是废弃的。 该方法天生是不安全的。使用thread.stop()停止一个线程,导致释放(解锁)所有该 …
私有构造函数捕获模式
《Java并发编程实践》的注解中有提到这一概念。 The private constructor exists to avoid the race condition that would occur if the copy …
Docker 快速构建 Cassandra 和 Java 操作
搭建Cassandra 使用docker创建Cassandra,方便快捷 docker pull cassandra:latest docker run -d --name cassandra -p 9042:9042 cassandra …
MetaspaceSize的坑
这几天生产上有台机器的Metaspace一直在告警,Metaspace使用达到了97%。使用-XX:MetaspaceSize=512m,告警也还在在持续,查看MC只有81536.0,显然这个参数没起作用。 也有人遇到类似的问题,并 …
一个Tomcat类加载问题
背景 一个Tomcat实例中运行了三个应用,其中一个对接了Apereo的CAS系统。现在要求另外两个系统也对接CAS系统,问题就出现了: 应用启动后打开其中两个应用的任何一个,登录完成后系统都没有问题。唯独首选打开第三个,其他两个报 …
Scala笔记:用函数字面量块调用高阶函数
这里会用到几个概念高阶函数、函数字面量、参数组 高阶函数 high-order function 函数的一种,简单来说它包含了一个函数类型的参数或者返回值。 所谓的高阶是跟一阶函数相比,深入一下: 一个或多个参数是函数,并返回一个值。 返回 …
GreenPlum JDBC和C3P0数据源
在网上搜索GreenPlum(GPDB)的数据源配置的时候,发现搜索结果都是用postgresql的配置。 import com.mchange.v2.c3p0.DataSources; import …
Scala笔记:def vs Val
先说原理: val修饰的在定义的时候执行 def修饰的在调用的时候执行 直观的例子: //注释的行为REPL输出 def test: () => Int = { println("def called") val r …
Key长度对Redis性能影响
最近Redis的使用中用的到key可能比较长,但是Redis的官方文档没提到key长度对性能的影响,故简单做了个测试。 环境 Redis和测试程序都是运行在本地,不看单次的性能,只看不同的长度堆读写性能的影响。 测试方法 使用长度分别 …
遍历 Collection 时删除元素
其实标题我想用《为什么foreach边循环边移除元素要用Iterator?》可是太长。 不用Iterator,用Collection.remove(),会报ConcurrentModificationException错误。 …
Java Volatile关键字
volatile通过保证对变量的读或写都是直接从内存中读取或直接写入内存中,保证了可见性;但是volatile并不足以保证线程安全,因为无法保证原子性,如count++操作: 将值从内存读入寄存器中 进行加1操作,内存保存到寄存器中 结果从 …
Mybatis报错“Result Maps Collection Already Contains Value for ***”
这是工作中遇到的一个问题:测试环境部署出错,报了下面的问题。 Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains …
消费时offset被重置导致重复消费
这是实际使用时遇到的问题:kafka api的版本是0.10,发现有重复消费问题;检查log后发现在commit offset的时候发生超时。 Auto offset commit failed for group test: Commit …
TheadPoolExecutor源码分析
TheadPoolExecutor源码分析 ThreadPoolExecutor是多线程中经常用到的类,其使用一个线程池执行提交的任务。 实现 没有特殊需求的情况下,通常都是用Executors类的静态方法 …
Kafka Java生产者模型
Producer初始化 初始化KafkaProducer实例,同时通过Config数据初始化MetaData、NetWorkClient、Accumulator和Sender线程。启动Sender线程。 MetaData信息 记 …
探索Rabbitmq的Java客户端
AMQPConnection 实例初始化 创建Connection时会通过FrameHandlerFacotry创建一个SocketFrameHandler,SocketFrameHandler对Socket进行了封装。 public …
深入剖析 HashSet 和 HashMap 实现
HashSet是一个包含非重复元素的集合,如何实现的,要从底层实现代码看起。 背景 首先非重复元素如何定义,看Set的描述: More formally, sets contain no pair of elements e1 and e2 …
多线程下的单例模式+反汇编
多线程下的单例模式的实现,顺便做了反汇编。 public class MySingleton { private static MySingleton INSTANCE; private MySingleton() { } public …
使用Kryo替换spring Amqp的Java序列化
spring amqp的原生并没有对Kryo加以支持,Kryo的优点就不多说了。 git地址:https://github.com/addozhang/spring-kryo-messaeg-converter public class …
Rabbitmq延迟队列实现
工作中很多场景需要用到定时任务、延迟任务,常用的方法用crontab job、Spring的Quartz,然后扫描整张数据库表,判断哪些数据需要处理。控制的粒度没办法做到特定数据上。 后来就想到了Rabbitmq,Rabbitmq本来不没有 …