文章目錄
- 前言
- 一、項目最後目錄結構
- 二、建立根項目dubbo-demo
-
- 1. dubbo相關依賴
- 2. pom.xml 如下:
- 三、 建立 api子產品
-
- 1. api子產品結構:
- 2. User實體類
- 3. UserService 接口類
- 四、 建立 provider 服務提供者 子產品
-
- 1. provider子產品目錄
- 2. UserServiceImpl 接口實作類
- 3. application.yml
- 4. Provider 啟動類
- 5. pom.xml
- 五、建立 customer 消費者子產品
-
- 1. 目錄結構
- 2. TestController 控制器
- 3. application.yml 配置檔案
- 4. Customer啟動類
- 5. pom.xml
- 六、運作、監控
-
- 1. 運作項目
- 2. 檢視監控
- 七、注意的點
前言
- dubbo學習一:zookeeper與dubbo的關系,下載下傳安裝啟動zookeeper(解決啟動中報錯)
- dubbo學習二:下載下傳Dubbo-Admin管理控制台,并分析在2.6.1及2.6.1以後版本的變化
- 本次學習一下 springboot 整合 dubbo、zookeeper并做記錄,前提需要先搭建起來 dubbo 和 zookeeper 。
- 代碼已上傳到 GitHub https://github.com/fengfanli/springboot-dubbo-demo,記得 mark一下哦
一、項目最後目錄結構
項目是采用maven的 子產品化搭建的。不了解子產品化工程可以看一下這個部落格
SpringBoot建立maven多子產品項目,看這一篇文章即可
對目錄進行分析:
分為三個子產品:
- api(接口)(該子產品必須要有,這裡放置資料和接口)
- provider(業務接口提供者,實作接口,實作api子產品中的 接口,讓 customer 消費)
- customer(訂閱消費服務,調用提供者中的接口)
二、建立根項目dubbo-demo
1. dubbo相關依賴
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.5</version>
</dependency>
2. pom.xml 如下:
<?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>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>customer</module>
<module>provider</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.feng.dubbo</groupId>
<artifactId>dubbo-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-demo</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 打包跳過單元測試 -->
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>-->
</plugins>
</build>
</project>
三、 建立 api子產品
1. api子產品結構:
2. User實體類
@Data
@NoArgsConstructor
public class User implements Serializable {
private Integer id;
private String name;
private String sex;
private String age;
public User(Integer id, String name, String sex, String age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
}
3. UserService 接口類
public interface UserService {
List<User> findAll();
String sayHello(String name);
}
- pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-demo</artifactId>
<groupId>com.feng.dubbo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.feng.dubbo</groupId>
<artifactId>api</artifactId>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<!-- 配置Jar打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
四、 建立 provider 服務提供者 子產品
1. provider子產品目錄
2. UserServiceImpl 接口實作類
這個地方注意一下 @Service() 為 dubbo的注解 import org.apache.dubbo.config.annotation.Service;
//@Service(version = "1.0.0", interfaceClass = UserService.class)
@Service()
public class UserServiceImpl implements UserService {
@Override
public List<User> findAll() {
LinkedList users = new LinkedList();
User user = new User(1, "小明", "男", "20");
User user1 = new User(2, "小紅", "女", "22");
users.add(user);
users.add(user1);
return users;
}
@Override
public String sayHello(String name) {
return "hello,"+name;
}
}
3. application.yml
這裡的 address 為 zookeeper注冊與服務中心 的 ip,端口預設為 2181,也可以修改。
dubbo:
application:
name: dubbo-provider
registry:
address: zookeeper://127.0.0.1:2181 # zookeeper 注冊中心位址
protocol:
name: dubbo
port: 20880 # dubbo 協定端口,預設為20880
server:
port: 81
4. Provider 啟動類
@SpringBootApplication
@EnableDubbo(scanBasePackages = "com")
public class Provider {
public static void main(String[] args) {
SpringApplication.run(Provider.class, args);
}
}
5. pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-demo</artifactId>
<groupId>com.feng.dubbo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.feng.dubbo</groupId>
<artifactId>provider</artifactId>
<dependencies>
<dependency>
<groupId>com.feng.dubbo</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<!-- 配置Jar打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
五、建立 customer 消費者子產品
1. 目錄結構
2. TestController 控制器
@RestController
@RequestMapping("/user")
public class TestController {
@Reference
private UserService userService;
@RequestMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
}
@RequestMapping("sayHello")
public String sayHello(String name){
return userService.sayHello(name);
}
@RequestMapping("hello/{name}")
public String hello(@PathVariable String name){
return "hello"+name;
}
}
3. application.yml 配置檔案
dubbo:
application:
name: dubbo-customer
registry:
address: zookeeper://127.0.0.1:2181 # zookeeper 注冊中心位址
server:
port: 80
4. Customer啟動類
@SpringBootApplication
@EnableDubbo(scanBasePackages = "com")
public class Customer {
public static void main(String[] args) {
SpringApplication.run(Customer.class, args);
}
}
5. pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dubbo-demo</artifactId>
<groupId>com.feng.dubbo</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.feng.dubbo</groupId>
<artifactId>customer</artifactId>
<dependencies>
<dependency>
<groupId>com.feng.dubbo</groupId>
<artifactId>api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
項目到此 搭建完成
六、運作、監控
1. 運作項目
- 首先運作zookeeper,輕按兩下
bin/zkServer.cmd
- 啟動 provider 子產品的
方法Provider.Main
- 最後啟動Customer 子產品的
方法,此時服務已被注冊到 zookeeper ,且消費者已從 zookeeper 訂閱所有被注冊的服務。Customer.Main
2. 檢視監控
- 啟動dubbo的控制管理界面,這裡采用上一個部落格的2.5.8版本的
管理子產品dubbo-admin
- 浏覽器登入如下:
http://localhost:8090/dubbo-admin-2.5.8/
- 檢視提供者和消費者,都已經注冊到zookeeper上了。
七、注意的點
- 提供者者子產品中的
注解為dubbo的注解@Service()