Dubbo

dubbo——负载均衡

佐手、 提交于 2020-03-16 03:19:01
dubbo提供四种负载均衡策略:随机、轮询、最少活动、一致性hash 一、RandomLoadBalance——随机 protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) { // Number of invokers int length = invokers.size(); // Every invoker has the same weight? boolean sameWeight = true; // the weight of every invokers int[] weights = new int[length]; // the first invoker's weight int firstWeight = getWeight(invokers.get(0), invocation); weights[0] = firstWeight; // The sum of weights int totalWeight = firstWeight; for (int i = 1; i < length; i++) { int weight = getWeight(invokers.get(i), invocation); // save

阿里Dubbo疯狂更新,关Spring Cloud什么事?

非 Y 不嫁゛ 提交于 2020-03-14 08:21:55
最近,开源社区发生了一件大事,那个全国 Java 开发者使用最广的开源服务框架 Dubbo 低调重启维护,并且 3 个月连续发布了 4 个维护版本。 我上次在写 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结 这篇文章的时候,就有很多的网友给我留言说,Dubbo 又开始更新了。我当然是清楚的,我也一直在关注着 Dubbo 的走向,在几个月前技术圈里面就有一个消息说是 Dubbo 又开始更新了,大家议论纷纷不知真伪。我还专门跑到 GitHub 上面进行了留言询问,最后在 Dubbo 的 gitter 聊天室里面找到了确信的答案,说是正在组建团队。虽然稍稍有所期待,但也不知道阿里这次拿出了多少的诚意来做这件事,于是我昨天又到 GitHub 逛了一下,发现从 9 月开始,阿里三个月连着发布了四个版本,还是非常有诚意的,值得关注。 Dubbo简介 Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过高性能 RPC 实现服务的输出、输入功能和 Spring 框架无缝集成。Dubbo 包含远程通讯、集群容错和自动发现三个核心部分。 它提供透明化的远程方法调用,实现像调用本地方法一样调用远程方法,只需简单配置,没有任何 API 侵入。同时它具备软负载均衡及容错机制

Springboot项目的接口防刷(实例)

一笑奈何 提交于 2020-03-13 14:39:14
技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java . lang . annotation . Retention ; import java . lang . annotation . Target ; import static java . lang . annotation . ElementType . METHOD ; import static java . lang . annotation . RetentionPolicy . RUNTIME ; /** * @author yhq * @date 2018/9/10 15:52 */ @Retention ( RUNTIME ) @Target ( METHOD ) public @interface AccessLimit { int seconds ( ) ; int maxCount ( ) ; boolean needLogin ( ) default true ; } 接着就是在Interceptor拦截器中实现: import com . alibaba . fastjson . JSON ; import com . example . demo . action . AccessLimit ; import com . example .

dubbo源码分析系列(4)dubbo通信设计

非 Y 不嫁゛ 提交于 2020-03-12 22:28:12
#1 系列目录 dubbo源码分析系列(1)扩展机制的实现 dubbo源码分析系列(2)服务的发布 dubbo源码分析系列(3)服务的引用 dubbo源码分析系列(4)dubbo通信设计 #2 NIO通信层的抽象 目前dubbo已经集成的有netty、mina、grizzly。先来通过案例简单了解下netty、mina编程(grizzly没有了解过) ##2.1 netty和mina的简单案例 netty原本是jboss开发的,后来单独出来了,所以会有两种版本就是org.jboss.netty和io.netty两种包类型的,而dubbo内置的是前者。目前还不是很熟悉,可能稍有差别,但是整体大概都是一样的。 我们先来看下io.netty的案例: public static void main(String[] args){ EventLoopGroup bossGroup=new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap=new ServerBootstrap(); serverBootstrap.group(bossGroup,workerGroup) .channel

源码分析Dubbo网络通讯篇之NettyServer网络事件派发机制(Dispatch)

℡╲_俬逩灬. 提交于 2020-03-12 21:06:33
本节将主要学习Dubbo是如何使用Netty来实现网络通讯的。 从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。 一条TCP连接进行传输,在网络层至少要考虑如下问题: 服务端,客户端网络通讯模型(线程模型) 传输(编码解码、序列化)。 服务端转发策略等。 Dubbo服务端的网络启动流程,在上篇中已给出序列图,本节还是以该图为切入点,引入本文的两个主人公:NettyServer、NettyClient。 dubbo使用SPI机制,根据配置,可以支持如下框架实现网络通讯模型,例如netty3,netty4、mina、grizzly,本文重点分析基于Netty4的实现,包路径:dubbo-remoting-netty4。 从上面的流程图,NettyTransport的职责就是调用new NettyServer的构造方法,从而构建NettyServer对象,在深入NettyServer对象构造过程之前,先来看一下NettyServer的类继承层次: NettyServer构造函数: public NettyServer(URL url, ChannelHandler handler) throws RemotingException { // @1 super(url, ChannelHandlers

dubbo 的多注册中心、分组、集群的总结

▼魔方 西西 提交于 2020-03-12 19:35:24
首先要区分两个概念:多注册中心和集群的不同点,不然看别人的代码会傻傻分不清。 # 集群配置【消费者 springboot】 dubbo.registries[0].address=172.17.130.161:2181,172.17.130.161:2182,172.17.130.162:2181 <!-- 多注册中心配置,竖号分隔表示同时连接多个不同注册中心 --> <dubbo:registry address="10.20.141.150:9090|10.20.154.177:9010" /> 提供者springmvc 写法 <!--同一注册中心的多个集群地址用逗号分隔 --> 提供者 springboot 写法 dubbo.registry.address=172.17.130.161:2181,172.17.130.161:2182,172.17.130.162:2181 # 注册中心 0 spring.dubbo.application.registries[0].address=zookeeper:#127.0.0.1:2181=xxx # 注册中心 1 spring.dubbo.application.registries[1].address=zookeeper:#127.0.0.1:2181=xxx 来源: oschina 链接: https://my

Dubbo 接口转化为gRPC服务

≡放荡痞女 提交于 2020-03-12 18:24:24
公司是多语言研发环境,目前Java项目居多,使用Dubbo进行服务间调用。目前公司Nodejs项目、Golang已经很多,平常也用阿里开源的eggjs框架进行开发。经过技术选型, gRPC 支持跨语言、高性能、HTTP/2,使用Protobuf进行数据传输立即吸引了我。于是开始写gRPC到Dubbo的转换,Dubbo本身支持泛化调用,这为接入提供了便利,项目已经开源。 gRPC Server定义 git clone https://github.com/Jijun/grpc-dubbo-proxy.git 修改yml中zookeeper地址,metadata-report需要新版本dubbo,可以忽略。 proxy: registry: address: zookeeper://127.0.0.1:2181 group: dubbo metadata-report: address: zookeeper://127.0.0.1:2181 启动项目: > SPRING_PROFILES_ACTIVE=product mvn clean spring-boot:run 定义传输的proto文件 : clazz_method_param.proto 如下, syntax = "proto3" ; option java_multiple_files = true ; option

springboot启动dubbo时端口占用,但相关端口项目已经关闭,还是显示端口占用

给你一囗甜甜゛ 提交于 2020-03-12 12:15:24
参考: https://blog.csdn.net/qq_41723615/article/details/88641959 ...can not bind port 20881 ... Caused by: java.net.BindException: Address already in use: bind 异常的意思是20881端口已经被绑定,无法绑定端口20881 此异常为springboot启动异常,tomcat端口已经启动了,占用了,把后台tomcat关闭即可: 在cmd命令窗口: 1.输入 netstat -ano|findstr 8005,回车,显示在最后面的数字就是我们tomcat进程的端口号。 2.输入 taskkill /pid xxxx /f xxxx就是我们的端口号,回车,终止! 终止不了:则输入 tasklist | findstr 进程号 查看是哪个进程,在运行,在任务管理器把它关了即可。 来源: https://www.cnblogs.com/acelance/p/12468106.html

SSM(十一) 基于dubbo的分布式架构

末鹿安然 提交于 2020-03-12 11:19:05
前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM 项目来让第一次接触的同学能快速上手。 浅谈分布式架构 分布式架构 单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 我们拿一个电商系统来说: 单系统 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 垂直拆分-多应用 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用 Nginx 进行反向代理和简单的负载均衡。 SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: 用户系统 订单系统 支付系统 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就太严重了。 所以需要将整个项目拆分成若干个独立的应用,可以进行独立的开发上线实现快速迭代。 如上图所示每个应用之间相互独立,每个应用可以消费其他应用暴露出来的服务,同时也对外提供服务。 从架构的层面简单的理解了,接下来看看如何编码实现。 基于dubbo的实现 dubbo 应该算是国内使用最多的分布式服务框架,基于此来实现对新入门的同学应该很有帮助。

基于 dubbo 的分布式架构

和自甴很熟 提交于 2020-03-12 11:18:47
前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的 SSM 项目来让第一次接触的同学能快速上手。 浅谈分布式架构 分布式架构 单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 我们拿一个电商系统来说: 单系统 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 垂直拆分-多应用 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用 Nginx 进行反向代理和简单的负载均衡。 SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: 用户系统 订单系统 支付系统 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就太严重了。 所以需要将整个项目拆分成若干个独立的应用,可以进行独立的开发上线实现快速迭代。 如上图所示每个应用之间相互独立,每个应用可以消费其他应用暴露出来的服务,同时也对外提供服务。 从架构的层面简单的理解了,接下来看看如何编码实现。 基于dubbo的实现 dubbo 应该算是国内使用最多的分布式服务框架,基于此来实现对新入门的同学应该很有帮助。