Dubbo的接口调用过程
简介本篇文件我们研究dubbo服务的调用过程,即从消费端发起接口调用到服务端接收请求,然后返回到消费端结果的整个一个调用过程。
消费端发起调用invoker的调用直接看在服务引用过程中被代理后的接口源码:
1234567891011121314public class proxy0 implements ClassGenerator.DC, Destroyable, EchoService, DemoService { public static Method[] methods; private InvocationHandler handler; // 调用sayHello,最终会委托给InvokerInvocationHandler public String sayHello(String string) { Object[] arrobject = new Object[]{string}; Object object = this.handler.invoke(this, metho ...
ElasticSearch初探
ElasticSearch搭建单机应用下载解压进入官网,下载安装最新的版:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html
12345wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gzwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gz.sha512shasum -a 512 -c elasticsearch-7.12.1-linux-x86_64.tar.gz.sha512 tar -xzf elasticsearch-7.12.1-linux-x86_64.tar.gzcd elasticsearch-7.12.1/
启动1./bin/elasticsearch
启动异常1:
12345678910 ...
Dubbo服务的引用
简介我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历 Invoker 创建、代理类创建等步骤。
服务的引用引用示例为了研究方便研究源码引用过程,我们通过api引用方式进行研究,示例代码如下:
12345678910public static void main(String[] args) { ReferenceConfig<DemoService> reference = new ReferenceConfig<>(); reference.setApplication(new ApplicationConfig("dubbo-demo-api-consumer")); reference.setRegistry(new RegistryConfig(&quo ...
Dubbo的服务导出
简介Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。也可以通过api直接执行export进行导出。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。为了方便研究源码,我们通过api直接导出服务。
源码分析示例代码api方式导出源码示例:
12345678910public static void main(String[] args) throws Exception { ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>(); service.setProtocol(new ProtocolConfig("dubbo")); service.setInterface(DemoService.class); service.s ...
用谷歌浏览器驱动做爬虫
下载驱动http://chromedriver.storage.googleapis.com/index.html
加入依赖12345<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-remote-driver</artifactId> <version>3.0.1</version></dependency>
代码实例123456789101112131415161718192021222324@Testpublic void get() throws Exception{ RemoteWebDriver driver = null; try { Capabilities capabilities = new DesiredCapabilities(); ...
Dubbo的SPI分析
简介SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。
普通SPIJava SPI 示例定义接口和实现类123public interface AnimalHoo { void hoo();}
123456789101112public class CatHoo implements AnimalHoo{ @Override public void hoo() { System.out.println("喵喵..."); }}publi ...
Dubbo的简介
Dubbo是什么?Apache Dubbo是一款高性能、轻量级的开源服务框架。
开发团队Dubbo共有六个开发人员参与开发和测试,每一个开发人员都是很有经验,团队合作很默契,开发过程也很有节奏,有完善质量保障流程。团队组成:梁飞 (开发人员/产品管理)刘昊旻 (开发人员/过程管理)刘超 (开发人员/用户支持)李鼎 (开发人员/用户支持)陈雷 (开发人员/质量保障)闾刚 (开发人员/开源运维)从左至右:刘超,梁飞,闾刚,陈雷,刘昊旻,李鼎
Dubbo有哪些核心能力面向接口代理的高性能RPC调用提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
集群容错和负载均衡内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
服务自动注册和发现支持多种注册中心服务,服务实例上下线实时感知。
高度可扩展能力遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
运行期流量调度内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布, ...
Java知识问答(极客学习笔记)
Java基础Exception和Error有什么区别?
Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
Exception和Error体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error是指在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。
Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的Error,是Throwable不是Exception。不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBo ...
Mac绿色安装mysql数据库
Mac绿色安装mysql数据库下载msyql服务下载地址:https://dev.mysql.com/downloads/mysql/选择macOS 10.15 (x86, 64-bit), Compressed TAR Archive 版本进行下载
数据库安装配置解压下载的mysql数据库,然后拷贝到一个你喜欢的目录下,如:/Users/atomic/.app/mysql
12# 移动到目标目录下mv mysql-8.0.22-macos10.15-x86_64 /Users/atomic/.app/mysql
修改新目录的所属用户和用户组
1sudo chown -R atomic:wheel /Users/atomic/.app/mysql
*linux要创建用户组和用户,同时授权文件夹
1234groupadd mysqluseradd -r -s /sbin/nologin -g mysql mysql -d /usr/local/mysql chown -R mysql .chgrp -R mysql .
初始化mysql
12cd /Users/atomic/.app ...
Mac文件夹名称本地化
Mac文件夹名称本地化在使用mac的时候,自带的一些文件夹如:桌面,下载,文稿等在Finder中都是中文的,但是在命令行中看到的是英文的。作为一名开发者,创建的某些文件夹需要程序访问,为了防止中文问题,就用了英文,但是在Finder看着有点别扭,就想把这些文件也设置为本地化,下面将介绍方法。
首先关闭SPI权限重启mac电脑,长按command+r进入系统引导界面,在左上角菜单中找到终端,输入以下命令关闭SPI保护:
1csrutil disable
如果要恢复SPI保护则执行以下命令:
1csrutil enable
文件夹本地化配置首先创建一个英文的文件夹,已经创建的可以忽略。
1mkdir Works
开始对文件夹Works配置本地化:
12345678910sudo mount -uw /cd /System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lprojsudo /usr/libexec/PlistBuddy -c ...