1. dubbo简介
Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。
其中RPC(remote procedure call)为远程过程调用,PRC不是指一个具体的技术,而是值整个网络的调用过程,例如,服务器A和B,分别部署了一个应用,那么A服务器的应用肯定不能直接调用B服务器的应用,所以通过网络来表达调用的语义和传达调用的数据。Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。这里记录一下spring-boot整合dubbo的过程,方便日后参考。
2. spring-boot整合Dubbo
2.1 安装服务注册中心zookeeper
zookeeper下载地址:http://archive.apache.org/dist/zookeeper/
这里安装3.6.0版本,下载得到名为apache-zookeeper-3.6.0-bin.tar.gz的压缩文件,不能下载apache-zookeeper-3.6.0.tar.gz,因为官网上有两个tar.gz文件,从版本3.5.5开始,带有bin名称的包才是我们想要的下载,可以直接使用的,里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。下载完成后将该文件上传到Linux系统,这里使用linux虚拟机进行安装。
安装zookeeper首先要保证linux系统已经安装jdk,jdk安装这里略。
- 将压缩包解压至根目录下的usr文件夹,解压命令:
tar zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /usr/
- 进入apache-zookeeper-3.6.0目录
cd /usr/apache-zookeeper-3.6.0-bin/
-
创建data目录
mkdir data
-
进入conf目录,修改配置文件
cd conf/ # 将zoo_sample.cfg文件重命令为zoo.cfg mv zoo_sample.cfg zoo.cfg # 编辑zoo.cfg vim zoo.cfg # 修改data属性 dataDir = /usr/apache-zookeeper-3.6.0-bin/data # wq保存退出vim
-
启动zookeeper
# 进入Zookeeper的bin目录,启动服务
cd ../bin
./zkServer.sh start
-
zookeeper的其他常用命令如下:
# 停止服务命令 ./zkServer.sh stop # 查看服务状态: ./zkServer.sh status # 客户端连接 ./zkCli.sh
2.2 创建服务提供者和消费者
首先创建创建服务提供者和消费者的spring-boot工程,并分别为他们添加dubbo和zookeeper依赖
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.7</version>
</dependency>
-
服务提供者实现服务方法:
package com.example.provider.service.impl; import com.alibaba.dubbo.config.annotation.Service; import org.example.service.TestService; // 此处service注解必须是dubbo下的service注解 @Service public class TestServiceImpl implements TestService { @Override public String test01(String param) { return "param=" + param + "当前端口: 8081"; } }
-
服务提供者配置(yml):
server:
port: 8081
spring:
dubbo:
application:
name: service-provider
base-package: com.example.service # dubbo服务发布者所在的包
registry:
address: 192.168.12.128 # zookeeper注册中心的地址(此处为虚拟机地址)
port: 2181 # zookeeper注册中心的端口
protocol: zookeeper
register: true
protocol:
name: dubbo
port: 20880
accesslog: true
provider:
retries: 1
delay: -1
- 服务提供者启动类加@DubboComponentScan注解
@SpringBootApplication
@DubboComponentScan
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
- 消费者使用服务方法
package com.example.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import org.example.service.TestService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("test")
public class TestController {
// 此处要用Reference注解,不能使用Autowired
@Reference
private TestService testService;
@GetMapping("get")
public String test01(String param){
String res = testService.test01(param);
System.out.println(res);
return res;
}
}
-
消费者配置(yml):
server: port: 8082 spring: dubbo: application: name: service-consumer base-package: com.example.service # dubbo服务调用者所在的包 registry: address: 192.168.12.128 # zookeeper注册中心的地址(此处为虚拟机地址) port: 2181 # zookeeper注册中心的端口 protocol: zookeeper subscribe: true protocol: name: dubbo host: 192.168.12.128 consumer: timeout: 1000 check: false # 服务启动时检查被调用服务是否可用 retries: 2 # 服务调用重试次数
-
分别启动提供者和消费者进行测试
至此,spring-boot整合dubbo大功告成
3. Dubbo管理控制台
我们在开发时,需要知道Zookeeper注册中心都注册了哪些服务,有哪些消费者来消费这些服务。我们可以通过部署一个管理中心来实现。
3.1 从git 导入dubbo-admin
部署dubbo-admin的参考地址:Dubbo Admin Introductions | Apache Dubbo
git地址: https://github.com/apache/dubbo-admin.git
因为zookeeper注册服务部署在了Linu虚拟机中,所以为了方便dubbo管理控制台也部署在Linux系统,如果不部署在虚拟机,需要修改配置文件中的zookeeper注册地址。
新版本的dubbo管理控制台采用前后端分离部署。
先从git克隆源码并进入dubbo-admin目录:
git clone https://github.com/apache/dubbo-admin.git
cd dubbo-admin
-
前端部署
cd dubbo-admin-ui npm install npm run dev
-
后端部署
# 进入dubbo-admin-server目录 cd dubbo-admin-server mvn clean package cd target java -jar dubbo-admin-server-0.3.0.jar