Dubbo

Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

此生再无相见时 提交于 2019-12-27 16:47:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo )首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节。同时 Dubbo 也是一款服务治理框架,它为分布式部署的微服务提供了服务发现、流量调度等服务治理解决方案。 在这篇文章中,我们将以以上基础能力为背景,尝试突破 Dubbo 体系自身,探索如何利用 Dubbo 对多协议、多服务发现模型的支持,来实现异构微服务体系间的互联互通。在实际业务场景中,这可以用来解决异构技术体系共存场景下的通信问题,帮助公司实现在异构技术体系间作平滑迁移,解决大规模跨区域、多集群部署场景的地址发现及流量调度等问题。 面向接口代理的透明服务开发框架 我们还是从 Dubbo 是一个微服务开发框架 这个大家熟知的概念开始。就像 Spring 是开发 Java 应用的基础框架一样,我们经常会选用 Dubbo 作为开发微服务业的基础框架。 Dubbo 框架的最大优势我认为就在其面向接口的编程模型,使得开发远程服务调用就像开发本地服务一样(以 Java 语言为例): 服务定义 public interface GreetingsService { String sayHi(String name); }

Sentinel 1.7.1 版本发布

烈酒焚心 提交于 2019-12-27 12:58:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> github 展开阅读全文 Sentinel 1.7.1 正式发布,带来了 Spring Web 模块适配、Dubbo 异步模式适配改进、控制台 ACL 注解扩展等多项特性和改进。主要变更如下: 特性/功能改进 新增原生的 Spring Web 模块适配( sentinel-spring-webmvc-adapter ),自动提取 controller 中的 URL pattern 作为资源名,对于 REST API 无需再通过 UrlCleaner 归一资源名 改进 sentinel-apache-dubbo-adapter 模块中 Dubbo 异步模式的统计处理方式(仅支持 Dubbo 2.7.2 及以上版本) 支持配置 transport 心跳组件发送心跳的路径 控制台新增 ACL 注解方式扩展,方便用户定制细粒度的权限控制 控制台 SentinelApiClient 推规则时默认编码采用 UTF-8,以支持中文字符 来源: oschina 链接: https://my.oschina.net/u/1464083/blog/3148102

JDK、Dubbo中的线程池

别说谁变了你拦得住时间么 提交于 2019-12-27 05:14:05
如果某个Dubbo请求并发比较高,同时响应上由于数据库原因或者网络原因导致接口内部请求慢,则该Dubbo方法及其容易导致Dubbo里的线程池耗尽,此时消费端会收到如下异常堆栈信息 Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-192.168.112.12:8045, Pool Size: 200 (active: 200, core: 200, max: 200, largest: 200), Task: 165633 (completed: 165433), Executor status:(isShutdown:false, isTerminated:false, isTerminating:false), in dubbo://192.168.112.12:8045! at com.alibaba.dubbo.common.threadpool.support.AbortPolicyWithReport.rejectedExecution(AbortPolicyWithReport.java:53) at java.util.concurrent.ThreadPoolExecutor

Dubbo Invoker概述----服务发现、集群、负载均衡、路由体系

故事扮演 提交于 2019-12-26 22:13:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Invoker,负载网络调用组件,底层依懒与网络通信,Invoker主要负责服务调用,自然与路由(比如集群)等功能息息相关,本节先从整体上把控一下Dubbo服务调用体系,服务发现、集群、负载均衡、路由机制等整个知识体系,梳理整理Dubbo Invoker整个类图如下: 主要有如下接口群 Invocation(调用上下文环境) Invocation: String getMethodName() 获取调用方法名。 Class< ? >[] getParameterTypes() 获取被调用方法的参数列表(参数类型) Object[] getArguments() 获取被调用方法的参数值数组。 Map< String, String> getAttachments() 获取附加属性。 String getAttachment(String key) 根据key获取附加属性值。 String getAttachment(String key, String defaultValue) 根据key获取附加属性,如果不存在,取默认值。 Invoker< ?> getInvoker() 获取当前的invoker。 RpcInvocation rpc服务调用实现类 Invocation执行调用上下文环境

Dubbo中SPI的原理

為{幸葍}努か 提交于 2019-12-26 16:07:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> dubbo中SPI机制,主要围绕三个注解:@SPI、@Adaptive、Activate @SPI:作用域为接口。它表示该类实现了SPI。 @Adaptive:作用域为方法,类。如果在类型定义则表明该类为自适应类,不需要额外动态生成。如果用在方法上,则会单独动态生成自适应类。 @Activate:通常作用域为类。用于多个扩展的配置。 三种常用的用法 // 这一种是最简单的,直接得到扩展实例 Exchanger exchanger = ExtensionLoader.getExtensionLoader(Exchanger.class).getExtension(type); public T getExtension(String name) { if (name == null || name.length() == 0) throw new IllegalArgumentException("Extension name == null"); if ("true".equals(name)) { return getDefaultExtension(); } // 从缓存中读取 Holder<Object> holder = cachedInstances.get(name); if (holder ==

Java 技术交流群,微信群

孤者浪人 提交于 2019-12-26 15:09:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 专注Java相关技术:SSM、Spring全家桶、微服务、MySQL、集群、dubbo、分布式、中间件、Linux、网络、多线程、Jenkins、Nexus、Docker、ELK等等! 超过100人后,无法入群,可加我微信,注明oschina 来源: oschina 链接: https://my.oschina.net/u/3669358/blog/3147658

dubbo原理

时光总嘲笑我的痴心妄想 提交于 2019-12-26 10:16:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 需要理解socket技术,NIO,IO多路复用 1、生产者将服务注册到zookeeper上面(dubbo://127.0.0.1:8080/com.xiong.UserService),然后在保存到一个map里面k:v serviceName:Object 注册的时候需要传输????后面补充 2、生产者开启netty服务监听 3、消费者启动,通过动态反向代理技术,在实现里面进行如下操作,然后从zookeeper中获取,生产者服务,启动netty消费者。 4、消费者调用生产者流程:消费者client传送参数(类名,方法名,参数名,参数值)->生产者netty服务端收到请求,然后通过反射技术,调用方法,将返回结果发送给客户端。 来源: oschina 链接: https://my.oschina.net/u/3142419/blog/3147513

13.1 dubbo服务降级源码解析

可紊 提交于 2019-12-25 22:39:36
从 9.1 客户端发起请求源码 的客户端请求总体流程图中,截取部分如下: //代理发出请求 proxy0.sayHello(String paramString) -->InvokerInvocationHandler.invoke(Object proxy, Method method, Object[] args) -->new RpcInvocation(method, args) -->MockClusterInvoker.invoke(Invocation invocation)//服务降级的地方 dubbo就是通过 MockClusterInvoker 来实现服务降级的。 一、示例 1 public interface DemoService { 2 // String sayHello(String name); 3 Car sayHello(String name); 4 } 将dubbo-demo中的服务接口定义一个返回模型Car。提供者实现如下: 1 public class DemoServiceImpl implements DemoService { 2 public Car sayHello(String name) { 3 Car car = new Car(); 4 car.setCarNum("浙A10000"); 5 car.setGoMile

dubbo rpc

柔情痞子 提交于 2019-12-25 19:59:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> dubbo中rpc通信算是重头戏。本文基于dubbo-rpc-api dubbo-rpc-default两个包重点了解下dubbo rpc的实现原理。 #1、代码示例 既然要说原理,首先就是把实现了rpc的代码示例放在这里。 DemoService service = new DemoServiceImpl(); protocol.export(proxy.getInvoker(service, DemoService.class, URL.valueOf("dubbo://127.0.0.1:9020/" + DemoService.class.getName() + "?codec=exchange"))); service = proxy.getProxy(protocol.refer(DemoService.class, URL.valueOf("dubbo://127.0.0.1:9020/" + DemoService.class.getName() + "?codec=exchange"))); assertEquals(service.getSize(new String[]{"", "", ""}), 3); 将其“肢解”,我们就能够对rpc有了一定的了解。 #1、生成实例

【SSM】ZooKeeper和Dubbo

老子叫甜甜 提交于 2019-12-25 19:46:55
前言 Dubbo是阿里开源的一个分布式服务框架,但是阿里内部用的却是HSF(High-speed Service Framework)。下面看看怎么使用吧。 Zookeeper Dubbo是个RPC调用框架,本质上不需要依赖中间件就可以完成点对点的通信,但是实际生产环境中,在动态扩容和下线等情况下,服务提供者和消费者的地址不可能是一直固定的,所以需要一个固定的第三方让双方暴露服务和发现服务,这也就是注册中心的存在意义,Dubbo官方推荐ZooKeeper。下面在windows下单机部署ZooKeeper作为演示。 1.官网下载ZooKeeper,地址 http://zookeeper.apache.org/ 2.解压后在conf路径下将zoo_sample.cfg改成zoo.cfg,默认数据文件会存放在C:\tmp\zookeeper,端口号是2181 3.在bin路径下,双击zkServer.cmd,正常会出现下面 binding to port 0.0.0.0/0.0.0.0:2181 4.运行zkCli.cmd,正常会出现下面 WatchedEvent state:SyncConnected type:None path:null Dubbo Dubbo内部封装了注册,心跳,RPC调用等复杂逻辑,所以使用上非常简单,只需要配置一下注册中心地址和相关的服务提供即可完成