文章目錄
什麼是Dubbo?
Apache Dubbo |ˈdʌbəʊ| 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。
是的,是 Apache Dubbo,不在是Alibaba Dubbo。原因簡單來說就是Alibaba 將dubbo 移交給Apache開源社區進行維護。
詳情見這兩篇文章:
Dubbo正式進入Apache開源孵化器
從遇見到信任 | Apache Dubbo 的畢業之旅
Dubbo2.7.x版本變化
- JDK版本需求上升到1.8
- 包名更換:com.alibaba.dubbo - > org.apache.dubbo
- 註冊中心一分爲三,變成註冊中心,元數據中心,配置中心
- 異步支持優化
- 服務治理規則優化
…
Dubbo生態系統
此圖來源於Dubbo官網
SpringBoot 整合Dubbo2.7.x
環境信息:
JDK 1.8
SpringBoot 2.2.1
Dubbo 2.7.4.1
準備工具:zookeeper 官網下載地址,新版dubbo_admin 官網下載地址
zookeeper 說明
ZooKeeper 是一個開源的分佈式協調服務,由雅虎創建,是 Google Chubby 的開源實現。
分佈式應用程序可以基於 ZooKeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協
調/通知、集羣管理、Master 選舉、配置維護,名字服務、分佈式同步、分佈式鎖和分佈式隊列
等功能。
Dubbo支持多種註冊中心:redis,nacos,zookeeper… 推薦使用zookeeper。
zookeeper 安裝啓動
在官網下載好zookeeper之後,解壓。
然後將conf文件夾下的zoo_sample.cfg文件複製一份重命名爲zoo.cfg不做任何的修改。
進入bin文件夾下找到zkServer.cmd(windows環境下,linux使用zkServer.sh) 雙擊啓動即可。
啓動後默認端口爲2181。 zookeeper在3.5.5版本後還會佔用8080端口,需要注意。
新版Dubbo_Admin
使用前建議先閱讀官方文檔說明!!!!
可以通過官網readme說明進行操作,也可以直接使用IDEA拉取項目代碼運行。
IDEA拉取項目之後先啓動 DubboAdminApplication 這個類,默認8080端口,已被佔用可以手動修改。
然後運行dubbo-admin-ui這個前端模塊(找到package.json,然後找到npm run dev ,點擊左側綠色啓動按鈕即可)注意:需要安裝node.js。默認8081端口,也是可以手動在index.js裏面進行修改。
運行起來後訪問 :localhost:8081 就會出現如下畫面,就表示啓動成功了。
創建springboot項目
先創建一個多模塊的springboot項目,方便體驗dubbo。
dubbo-api 接口服務模塊
pom文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hjljy</groupId>
<artifactId>springboot_dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hjljy</groupId>
<artifactId>dubbo_api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo_api</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
..................
然後定義兩個簡單的接口
public interface TestService {
String showName();
}
public interface TestService2 {
String showName();
}
dubbo-provider 服務提供者
pom文件內容:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--zookeeper 註冊中心客戶端引入 使用的是curator客戶端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo 2.7.x引入-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
<dependency>
<groupId>com.hjljy</groupId>
<artifactId>dubbo_api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
........
創建對應接口實現:
@Service(version = "1.0.0")
public class TestService2Impl implements TestService2 {
@Override
public String showName() {
return "HELLO TestService2";
}
}
@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
@Override
public String showName() {
return "HELLO DUBBO";
}
}
application配置文件配置:
# Spring boot application
spring.application.name=dubbo-provider-demo
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.hjljy.dubbo_provider.impl
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=7010
注意事項:
- @Service一定要加上version 屬性 並且是dubbo包下面的註解不是spring裏面的註解
- base-packages 指定接口實現所在路徑。
- dubbo的配置不再以spring開頭。
dubbo-comsumer 服務消費者
pom文件內容:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--zookeeper 註冊中心客戶端引入 使用的是curator客戶端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo 2.7.x引入-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
<dependency>
<groupId>com.hjljy</groupId>
<artifactId>dubbo_api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
消費創建的服務
@RestController
public class TestDubboController {
@Reference(version = "1.0.0")
TestService2 service2;
@Reference(version = "1.0.0")
TestService service;
@GetMapping("test1")
public String test1(){
return service.showName();
}
@GetMapping("test2")
public String test2(){
return service2.showName();
}
}
application配置文件配置:
spring.application.name=dubbo-consumer-demo
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=7000
啓動程序驗證DUBBO
先啓動 DubboProviderApplication
然後啓動 DubboConsumerApplication
最後訪問 http://127.0.0.1:7000/test1 http://127.0.0.1:7000/test2
成功返回信息,驗證成功。
然後登陸dubbo_admin查看提供的服務:
到這裏完成的springboot整合dubbo2.7.x就完成了。
完整代碼地址:https://gitee.com/hjljy/springboot_dubbo