
技术
dbqb007
Apache committer,熟悉中间件,微服务开发
展开
-
Dubbo融合Web Service教程
Web Service是一种传统的远程过程调用方式,它通过XML来定义服务信息和传输数据。Dubbo是一种分布式服务治理框架,它提供了服务注册与发现,负载均衡,远程调用等。Dubbo在进行服务调用时,默认使用Dubbo 自定义的协议,但也支持各种第三方协议,如rest,grpc,web service等。Dubbo提供了对Web Service的整合能力,主要是指可以将Web Service包装成Dubbo服务,因此提供了服务注册与发现,同时在提供者端可以让开发者像发布Dubbo服务那样,很简便地发布We原创 2020-07-19 21:02:56 · 766 阅读 · 0 评论 -
Spring相关项目master分支Snapshot下载问题解决
Spring相关项目是一个庞大的家族,除了Spring Framework之外,还有Spring Boot,Spring Cloud等。这些项目和其他开源项目有个明显区别,就是他们之间是有相互依赖的。比如Spring Boot依赖Spring Framework,Spring Cloud又依赖Spring Boot等。Spring相关项目的主开发分支是master分支。而master分支依赖的其...原创 2020-03-20 00:26:48 · 2567 阅读 · 1 评论 -
Activemq控制台的独立部署
Apache Activemq是一个高性能的开源消息队列。在启动它的时候,会自动启动一个自带的Web控制台,通过控制台可以查看当前Activemq服务器的情况,包括队列、主题、连接、订阅者等。这个控制台是通过嵌入式的Jetty容器启动的。不过有时候我们可能需要独立部署Web控制台,比如在Tomcat中通过插件形式启动Activemq,此时无法通过嵌入Jetty容器的方式启动Web控制台(因为To...原创 2019-12-15 19:42:26 · 345 阅读 · 0 评论 -
MySQL8查看和设置隔离级别
MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation。查看当前隔离级别的命令是select @@global.transaction_isolation,@@transaction_isolation;返回结果+--------------------------------+-------------...原创 2019-09-15 18:22:45 · 6811 阅读 · 0 评论 -
Dubbo服务端服务发布(一)Invoker创建
在Dubbo的服务发布过程中,Invoker链的构造是一个重要的步骤,Invoker代表的是一个可以调用的服务的接口。它的定义如下:public interface Invoker<T> extends Node { /** * get service interface. * * @return service interface. ...原创 2019-07-16 17:30:57 · 814 阅读 · 0 评论 -
Dubbo中InternalThreadLocal源码分析
在Java中,ThreadLocal是实现线程安全的一种手段,它的作用是对于同一个ThreadLocal变量,在每一个线程中都有一个副本,当修改任何一个线程的变量时,不会影响到其他线程。它通过在每一个Thread中存储一个类似于map的结构,以ThreadLocal变量为key,变量值为value。Dubbo在RPC调用的上下文中,需要借助ThreadLocal保存上下文。它从Netty中借鉴了...原创 2019-07-10 01:10:40 · 2765 阅读 · 0 评论 -
Dubbo/Netty中时间轮算法的原理
在Dubbo中,为增强系统的容错能力,在很多地方需要用到只需进行一次执行的任务调度。比如RPC调用的超时机制的实现,消费者需要各个RPC调用是否超时,如果超时会将超时结果返回给应用层。在Dubbo最开始的实现中,是采用将所有的返回结果(DefaultFuture)都放入一个集合中,并且通过一个定时任务,每隔一定时间间隔就扫描所有的future,逐个判断是否超时。这样的实现方式实现起来比较简单,但...原创 2019-06-02 16:59:16 · 2953 阅读 · 0 评论 -
基于有向无环图(DAG)的任务调度Demo
定时任务是软件开发中经常遇到的问题。简单的定时任务只需要在固定时间触发它的执行就可以了。但是对于复杂的定时任务,可能是由多个任务组成一个任务组,它们之间存在依赖关系,一个任务执行的条件,必须是它的前置任务已经执行成功(或者没有前置任务),它才可以执行。例如下面这幅图:图中任务的依赖关系为:任务1:依赖2,5任务2:依赖3,4任务3:无依赖任务4:无依赖任务5:无依赖...原创 2019-04-05 14:34:00 · 15272 阅读 · 5 评论 -
gRPC使用初探
gRPC是谷歌开源的一款RPC框架,基于HTTP/2协议,使用protocol buffer作为接口定义语言(Interface Definition Language)和底层数据交换格式。gRPC最大的优点是能跨语言,因为使用和语言无关的protobuf来定义接口,并且使用标准的http协议来进行传输,能使不同语言的服务端和客户端互相兼容。gRPC-java的github地址是https:/...原创 2019-03-31 13:26:00 · 1319 阅读 · 0 评论 -
基于循环数组实现的带滑动窗口的计数器限流算法
当系统面临高并发、大流量的请求时,为保障服务的稳定运行,可采取限流算法。限流,顾名思义就是当请求超过一定数量时,就限制新的流量对系统的访问。目前限流算法主要有计数器法、漏桶算法和令牌桶算法。最简单的计数器限流算法只需要一个int型变量(可使用AtomicInteger变量,保证操作的原子性)count。保存一个初始的时间戳。每当有请求到来时,先判断和时间戳之间的差是否在一个统计周期内,如果在的...原创 2019-03-02 22:32:26 · 2437 阅读 · 0 评论 -
Java中的线程中断机制
Java的线程用于并发执行任务。之前对线程这一块,一直没搞懂的就是中断这一块,什么interrupt(), interrupted(), isInterrupted()这几个方法,InterruptedException这个异常,一直没搞明白。今天读《Java并发编程实战》里面也说到了InterruptedException,于是又到网上找资料认真读了一下,这次终于搞懂了,于是记录一下。一.J...原创 2019-02-21 01:24:52 · 230 阅读 · 0 评论 -
Java中的不变集合
java提供了很多集合的接口和类,比如比较常用的List,它就有ArrayList,LinkedList等子类。这些类都是可变的(mutuable)。有时候,我们作为服务的提供方,不希望提供给客户端(此处的服务端和客户端是站在程序依赖的角度,而不是一般常说的基于C/S架构的服务端和客户端)的集合被对方改变内容。此时就需要利用原来内部可变的集合生成一个不可变的集合,提供给客户端。在Java中,生...原创 2019-02-20 01:06:47 · 595 阅读 · 0 评论 -
LeetCode刷题助手:根据数组生成二叉树
大家在刷LeetCode的二叉树相关的题目的时候,遇到问题需要在本地IDE里调试的时候,题目里给的二叉树的形式是一个数组,类似Integer[] array = new Integer[]{1, null, 2, null, null, null, 3};这种形式,它是以null来做填充,构成一个完全二叉树,具体的图我就不画了,大家自己理解一下。而我们需要自己手动把它转换成二叉树的形式,...原创 2019-02-18 22:16:52 · 8097 阅读 · 5 评论 -
Shardingsphere-JDBC初体验
Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。...原创 2019-02-17 21:36:11 · 7270 阅读 · 2 评论 -
设计JSON序列化类应该注意的一个问题
最近开发中遇到一个问题。公司内部公共的二方库定义了一个RPC的公共返回类:public class Result<T> { private boolean success; private T result; private String errorCode; private String errorMsg; public Result(T...原创 2019-02-17 01:17:28 · 628 阅读 · 0 评论 -
枚举类型name方法的应用
Enum类型是Java语言中一种特殊的类型,它拥有一组固定的值,在开发中用得很多。常见的用法是定义一个枚举之后,给每一个枚举值定义一个code, 或者name的属性,来作为这个枚举值的唯一标识。还有一个字段message,用来保存这个枚举值的描述。例如下面这个动物枚举类:public enum AnimalEnum2 { DOG("dog", "狗"), CAT("cat",...原创 2019-02-04 01:55:07 · 20051 阅读 · 0 评论 -
Tomcat源代码安装与运行
学习Java Web和做相关项目的时候经常要用到Tomcat服务器。过去一直是下载原创 2014-07-29 19:47:41 · 976 阅读 · 0 评论