一.Dubbo的发展历史以及特性简介 目录
一.Dubbo的发展历史以及特性简介
1.1 Dubbo的发展历史
1.2 Dubbo的特性
二、Dubbo的简单应用
2.1使用前的准备工作
2.2 Dubbo的官方demo
1.1 Dubbo的发展历史
2011年,阿里巴巴宣布开源SOA服务化治理框架——Dubbo2.0.7,在当时引起很大关注,并且被众多公司使用,同时在Dubbo的基础上,也有一些公司研发出自己公司的服务化框架,如2014年,当当网的Dubbox,支持http rest协议。当年10月,阿里发布了2.3.11版本后,突然停止维护该项目,2017年突然又宣布重启Dubbo项目,2018年,阿里将该项目捐献给了Apache基金会,进入Apache孵化器,同年更名为Apache Dubbo。
本来在之前的公司用的一直是spring cloud那一套微服务解决方案,没怎么接触dubbo,但是现在由于换工作,其他公司也有不少在使用dubbo,所以还是有必要熟悉一下dubbo这个也算比较流行的RPC框架。
1.2 Dubbo的特性
1.面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节;
2.服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
这一点从github上的dubbo项目中可以看出,支持各种服务注册组件:
文章图片
打开dubbo项目的注册模块,可以看到支持eureka,zookeeper,nacos,consul等注册中心服务组件。
3.运行期流量调度:内置条件,脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能
4,智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
5.支持多种配置中心
文章图片
dubbo项目的configcenter模块,可以看到,支持zookeeper,nacos,Apollo,consul等作为配置中心
6.高度可拓展能力:遵循微内核+插件的设计思想,所有核心能力和protocol、transport、serialization被设计为扩展点,平等对待内置实现和第三方实现
7.可视化的实例服务治理与运维:提供丰富的服务治理,运维工具;随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数
二、Dubbo的简单应用
2.1使用前的准备工作
虽然dubbo有默认的注册中心,但是dubbo推荐使用zookeeper作为注册中心。所以需要先安装zookeeper。
在linux服务器上安装zookeeper,需要确保已安装jdk
查看linux服务器上是否已安装jdk,可以使用java -version查看
文章图片
我用的 阿里云主机,已经安装了open-jdk 1.8,所以可以直接安装zookeeper了
由于github上的dubbo项目(https://github.com/apache/dubbo),下载下来看到使用的zookeeper是3.4.13,所以我准备在阿里云上也安装3.4.13版本zookeeper
文章图片
可以去官网下载tar包上传到服务器:
文章图片
但是官网上最新稳定版是3.6.1,而且只提供了三个最新版本的下载链接,官网提供的各个镜像网站也只提供这三个版本的下载,没有3.4.13版本
文章图片
文章图片
算了,那下载3.4.14版本算了
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
文章图片
然后解压
tar -zxvf zookeeper-3.4.14.tar.gz
然后进入zookeeper解压后的目录下的conf目录下,复制zoo_sample.cfg 为zoo.cfg
文章图片
vim 命令打开zoo.cfg文件
文章图片
修改一下
dataDir =/usr/data/zookeeper
dataLogDir=/usr/data/zookeeper/log
切换到usr目录下创建data/zookeeper/log多级目录
cd /usr
mkdir -p data/zookeeper/log
文章图片
配置环境变量:
vim /etc/profile
在最后面添加:(我打开文件,发现里面的环境变量已经配置好了,如下,包括jdk的环境变量也配好了)
ZOOKEEPER_HOME=/usr/software/zookeeper-3.4.14
PATH=$PATH:$ZOOKEEPER_HOME/bin
export PATH ZOOKEEPER_HOME PATH
文章图片
重新加载:
source /etc/profile
然后到阿里云控制台开放zookeeper的2181端口
文章图片
启动zookeeper
zkServer.sh start
查看状态:
zkServer.sh status
文章图片
重启:
zkServer.sh restart
关闭:
zkServer.sh stop
准备环境已经就绪,接下来可以上手一个dubbo的简单项目了
2.2 Dubbo的官方demo
文章图片
在dubbo-demo模块下还有四个子模块,annotation(注解方式开发),xml(xml方式配置开发)
主要看一下xml配置方式的开发(由于dubbo基于接口代理)所以,会需要先创建一个interface模块
相关依赖:受限是dubbo-demo的pom文件
4.0.0 org.apache.dubbo
dubbo-parent
${revision}
../pom.xml
dubbo-demopom
${project.artifactId}
The demo module of dubbo project true
dubbo-demo-interface
dubbo-demo-xml
dubbo-demo-annotation
dubbo-demo-api
org.apache.dubbo
dubbo-bom
${project.parent.version}
pom
import
然后是dubbo-demo-interface下的pom
4.0.0 org.apache.dubbo
dubbo-demo
${revision}
../pom.xml
dubbo-demo-interfacejar
${project.artifactId}
The demo module of dubbo project true
打包方式是jar的方式,因为一会儿服务提供方即provider需要引入这个dubbo-demo-interface依赖
官方dubbo-demo-interface模块,给了两个接口,这是其中一个Demoservice
文章图片
当然接口内容也可以自己自定义方法
package org.apache.dubbo.demo;
import java.util.concurrent.CompletableFuture;
public interface DemoService {String sayHello(String name);
default CompletableFuture sayHelloAsync(String name) {
return CompletableFuture.completedFuture(sayHello(name));
}}
接下来看服务提供类
在另外一个模块中dubbo-demo-xml中(以xml配置方式开发),可以看到有两个子模块,一个是服务提供,一个是服务消费
文章图片
dubbo-demo-xml项目下的pom
org.apache.dubbo
dubbo-demo
${revision}
../pom.xml
4.0.0 pomdubbo-demo-xmltrue
2.1.4.RELEASE
dubbo-demo-xml-provider
dubbo-demo-xml-consumer
org.apache.dubbo
dubbo-metadata-report-zookeeper
${project.parent.version}
org.springframework.boot
spring-boot-maven-plugin
${spring-boot-maven-plugin.version}
repackage
先看服务提供dubbo-demo-xml-provider的pom文件
4.0.0 org.apache.dubbo
dubbo-demo-xml
${revision}
../pom.xml
dubbo-demo-xml-providerjar
${project.artifactId}
The demo provider module of dubbo project true
1.7.25
org.apache.dubbo
dubbo-demo-interface
${project.parent.version}
org.apache.dubbo
dubbo-registry-multicast
org.apache.dubbo
dubbo-registry-nacos
com.alibaba.nacos
nacos-client
org.apache.dubbo
dubbo-registry-zookeeper
org.apache.dubbo
dubbo-configcenter-zookeeper
org.apache.dubbo
dubbo-configcenter-nacos
org.apache.dubbo
dubbo-metadata-report-nacos
org.apache.dubbo
dubbo-metadata-report-zookeeper
org.apache.dubbo
dubbo-rpc-dubbo
org.apache.dubbo
dubbo-config-spring
org.apache.dubbo
dubbo-remoting-netty4
org.apache.dubbo
dubbo-serialization-hessian2
org.apache.dubbo
dubbo-qos
org.slf4j
slf4j-api
org.slf4j
slf4j-log4j12
${slf4j-log4j12.version}
log4j
log4j
可以看到provider中引入了之前的demo-interface
文章图片
官方也已经引入了zookeeper依赖
provider中对接口进行了简单的实现
文章图片
接下来比较重要的部分来了,就是配置文件在resources目录下:
文章图片
接下来对配置文件加上注释:
配置好了之后,需要服务提供方的启动类Application启动应用
package org.apache.dubbo.demo.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Application {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new
// 指定服务暴露配置文件
ClassPathXmlApplicationContext("spring/dubbo-provider.xml");
//启动spring容器并暴露服务
context.start();
System.in.read();
}
}
启动后,控制台报错了,提示找不到某个模块中的包(这个UserService类在dubbo-config-api模块下)
文章图片
然后点开support包,发现这个support包又为了另一个模块下(dubbo-rpc-rest)
文章图片
那么既然找不到这个包,应该是maven仓库没有这个项目jar包,接下来,通过maven命令install
文章图片
结果build failure
查看错误提示:
Failure to find org.apache.dubbo:dubbo-build-tools:jar:1.0.0 in http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced -> [Help 1]
大致是说一个插件org.apache.dubbo:dubbo-build-tools:jar在阿里云私服上找不到(maven是setting.xml配置的仓库),网上有个教程说让该setting.xml,但是感觉为了这一个jar包去改配置有点麻烦
https://blog.csdn.net/Hello_Ray/article/details/87937506
又看了一下项目模块,有个这个模块
文章图片
那么再install一下这个模块,build success
好了,这下应该可以install dubbo-rpc-rest这个模块了,但是发现又报了新的错误
文章图片
模块中有一个类不能编译
文章图片
maven install命令,控制台有乱码,需要解决一下
参考下边这个里边的第二种方案,在项目模块的pom文件中添加配置,试了无效,再试第一种配置
https://blog.csdn.net/qq_39999478/article/details/80045624
文章图片
两种都没用,最后找到了解决方案:解决maven控制台出现乱码情况(而且编码必须是GBK,设置UTF-8都没用)
文章图片
改了这个配置之后,竟然maven install 显示build success了,神奇!!
文章图片
接下来重新启动服务提供方provider模块Application这个类(之前是报找不到包和类的错误)
发现可以打印类信息以及启动信息了,但是还是启动失败(java.lang.IllegalStateException:zookeeper not connected)
文章图片
提示zookeeper未连接
在linux服务器上关闭防火墙再试一下
systemctl stop firewalld.service
还是提示zookeeper未连接,再看上边的提示,有一个sessionTimeout=60000,但是dubbo项目中默认配置的超时时间是3000L
具体源码追溯可以参考这个博客,按照这个博客(dubbo集成zipkin问题二【Caused by: java.lang.IllegalStateException: zookeeper not connected】),改了超时时间,成功连接,并启动provider模块
文章图片
然后启动成功了
文章图片
接下来看服务消费方:pom文件
4.0.0 org.apache.dubbo
dubbo-demo-xml
${revision}
../pom.xml
dubbo-demo-xml-consumerjar
${project.artifactId}
The demo consumer module of dubbo project true
org.apache.dubbo
dubbo-metadata-report-zookeeper
org.apache.dubbo
dubbo-demo-interface
${project.parent.version}
org.apache.dubbo
dubbo-registry-multicast
org.apache.dubbo
dubbo-registry-nacos
com.alibaba.nacos
nacos-client
org.apache.dubbo
dubbo-registry-zookeeper
org.apache.dubbo
dubbo-configcenter-zookeeper
org.apache.dubbo
dubbo-configcenter-nacos
org.apache.dubbo
dubbo-metadata-report-nacos
org.apache.dubbo
dubbo-config-spring
org.apache.dubbo
dubbo-rpc-dubbo
org.apache.dubbo
dubbo-remoting-netty4
org.apache.dubbo
dubbo-serialization-hessian2
服务消费方要调用provider模块的服务
文章图片
着重看配置文件:
然后启动消费方
文章图片
【Apache Dubbo的使用】ok,演示完毕,也算是踩了很多坑。当然还可以基于注解开发,基于注解的时候,会使用configureation类并配合@Configuration注解进行配置,不再xml文件中配置了,但是流程是类似的! 使用xml方式配置时,其他更多配置参数以及参数说明可以参考官网:http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
推荐阅读
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- docker|Docker
- #|7.分布式事务管理
- python|PyTorch单机多卡分布式训练教程及代码示例
- 分布式 | 动态调整 DBLE 内线程池的数目