Dubbo 学习笔记(三) Spring Boot 整合 Dubbo(官方版)
- Dubbo 学习笔记 源码地址
- Dubbo 学习笔记(零) 自己实现一个 RPC 框架
- Dubbo 学习笔记(一) Hello,Dubbo
- Dubbo 学习笔记(二) Spring Boot 整合 Dubbo
- Dubbo 学习笔记(三) Spring Boot 整合 Dubbo(官方版)
0. 前言
这次使用的是 Apache 推出的 Spring Boot 与 Dubbo 整合的依赖。
- github.com/apache/incu…
- 最新的版本是 0.2.1
- star:2383
1<dependency>
2 <groupId>com.alibaba.boot</groupId>
3 <artifactId>dubbo-spring-boot-starter</artifactId>
4 <version>0.2.1.RELEASE</version>
5</dependency>
6
1. 创建项目
创建一个项目,三个模块分别是服务提供者、服务消费者、服务暴露的API。
项目结构:
1official
2 |-official-api
3 |-official-account-provider
4 |-official-web
主 POM 的依赖:
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5 <groupId>com.zdran.duboot</groupId>
6 <packaging>pom</packaging>
7 <artifactId>official</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 <name>official</name>
10 <description>Demo project for Spring Boot</description>
11
12 <parent>
13 <groupId>org.springframework.boot</groupId>
14 <artifactId>spring-boot-starter-parent</artifactId>
15 <version>2.1.2.RELEASE</version>
16 </parent>
17
18 <properties>
19 <java.version>1.8</java.version>
20 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22 <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
23 <dubbo.version>2.6.5</dubbo.version>
24 </properties>
25 <modules>
26 <module>official-api</module>
27 <module>official-account-provider</module>
28 <module>official-web</module>
29 </modules>
30
31 <build>
32 <plugins>
33 <plugin>
34 <groupId>org.springframework.boot</groupId>
35 <artifactId>spring-boot-maven-plugin</artifactId>
36 </plugin>
37 </plugins>
38 </build>
39</project>
2. 配置服务提供者
添加依赖:
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5 <parent>
6 <groupId>com.zdran.duboot</groupId>
7 <artifactId>official</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 </parent>
10 <groupId>com.zdran.official</groupId>
11 <artifactId>account-provider</artifactId>
12 <version>0.0.1-SNAPSHOT</version>
13 <name>account-provider</name>
14 <description>Demo project for Spring Boot</description>
15
16 <properties>
17 <java.version>1.8</java.version>
18 <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
19 <dubbo.version>2.6.5</dubbo.version>
20 </properties>
21
22 <dependencies>
23 <dependency>
24 <groupId>com.zdran.duboot</groupId>
25 <artifactId>official-api</artifactId>
26 <version>0.0.1-SNAPSHOT</version>
27 </dependency>
28 <!-- Dubbo Spring Boot Starter -->
29 <dependency>
30 <groupId>com.alibaba.boot</groupId>
31 <artifactId>dubbo-spring-boot-starter</artifactId>
32 <version>0.2.1.RELEASE</version>
33 </dependency>
34 <dependency>
35 <groupId>com.alibaba</groupId>
36 <artifactId>dubbo</artifactId>
37 <version>${dubbo.version}</version>
38 </dependency>
39 <dependency>
40 <groupId>io.netty</groupId>
41 <artifactId>netty-all</artifactId>
42 </dependency>
43
44 <dependency>
45 <groupId>org.springframework.boot</groupId>
46 <artifactId>spring-boot-starter-test</artifactId>
47 <version>2.1.2.RELEASE</version>
48 <scope>test</scope>
49 </dependency>
50
51 <dependency>
52 <groupId>org.apache.curator</groupId>
53 <artifactId>curator-framework</artifactId>
54 <version>2.11.1</version>
55 </dependency>
56 </dependencies>
57
58 <build>
59 <plugins>
60 <plugin>
61 <groupId>org.springframework.boot</groupId>
62 <artifactId>spring-boot-maven-plugin</artifactId>
63 </plugin>
64 </plugins>
65 </build>
66</project>
67
更新 application.yml
的配置:
1server:
2 port: 8086
3
4dubbo:
5 application:
6 name: Provide
7 registry:
8 address: zookeeper://39.105.78.88:2181
9 protocol:
10 name: dubbo
11 port: 20880
12 scan:
13 base-packages: com.zdran.official.user.service
注意:配置项是 dubbo.xxx,不是 spring.dubbo.xxx
实现 Service:
1package com.zdran.official.user.service;
2
3import com.alibaba.dubbo.config.annotation.Service;
4import com.zdran.duboot.official.api.OfficialHelloApi;
5
6/**
7 * Create by ranzd on 2019/1/28
8 *
9 * @author ranzd@chinaunicom.cn
10 */
11@Service(version = "1.0", timeout = 50000)
12public class OfficialHelloApiImpl implements OfficialHelloApi {
13 @Override
14 public String sayHello(String name) {
15 return "helll, " + name;
16 }
17}
18
接口定义在了official-api模块
3. 实现消费者
添加依赖:
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5 <parent>
6 <groupId>org.springframework.boot</groupId>
7 <artifactId>spring-boot-starter-parent</artifactId>
8 <version>2.1.2.RELEASE</version>
9 <relativePath/> <!-- lookup parent from repository -->
10 </parent>
11 <groupId>com.zdran.official</groupId>
12 <artifactId>web</artifactId>
13 <version>0.0.1-SNAPSHOT</version>
14 <name>web</name>
15 <description>Demo project for Spring Boot</description>
16
17 <properties>
18 <java.version>1.8</java.version>
19 <dubbo.version>2.6.5</dubbo.version>
20 </properties>
21
22 <dependencies>
23 <dependency>
24 <groupId>com.zdran.duboot</groupId>
25 <artifactId>official-api</artifactId>
26 <version>0.0.1-SNAPSHOT</version>
27 </dependency>
28 <dependency>
29 <groupId>org.springframework.boot</groupId>
30 <artifactId>spring-boot-starter-web</artifactId>
31 </dependency>
32
33 <!-- Dubbo Spring Boot Starter -->
34 <dependency>
35 <groupId>com.alibaba.boot</groupId>
36 <artifactId>dubbo-spring-boot-starter</artifactId>
37 <version>0.2.1.RELEASE</version>
38 </dependency>
39 <dependency>
40 <groupId>com.alibaba</groupId>
41 <artifactId>dubbo</artifactId>
42 <version>${dubbo.version}</version>
43 </dependency>
44 <dependency>
45 <groupId>io.netty</groupId>
46 <artifactId>netty-all</artifactId>
47
48 </dependency>
49
50 <dependency>
51 <groupId>org.springframework.boot</groupId>
52 <artifactId>spring-boot-starter-test</artifactId>
53 <version>2.1.2.RELEASE</version>
54 <scope>test</scope>
55 </dependency>
56
57 <dependency>
58 <groupId>org.apache.curator</groupId>
59 <artifactId>curator-framework</artifactId>
60 <version>2.11.1</version>
61 </dependency>
62 </dependencies>
63
64 <build>
65 <plugins>
66 <plugin>
67 <groupId>org.springframework.boot</groupId>
68 <artifactId>spring-boot-maven-plugin</artifactId>
69 </plugin>
70 </plugins>
71 </build>
72
73</project>
74
注意:curator-framework 这个依赖跟使用的zk版本有关系
curator-framework 2.x.x 支持的zk版本为 3.4.x 和3.5.x
curator-framework 3.x.x 支持的zk版本为 3.5.x
更新 application.yml
的配置:
1server:
2 port: 8085
3
4dubbo:
5 application:
6 name: conusmer
7 registry:
8 address: zookeeper://39.105.78.88:2181
9 protocol:
10 name: dubbo
11 port: 20880
12 scan:
13 base-packages: com.zdran.official.web
创建消费者的服务
1package com.zdran.official.web.controller;
2
3import com.alibaba.dubbo.config.annotation.Reference;
4import com.zdran.duboot.official.api.OfficialHelloApi;
5import org.springframework.web.bind.annotation.GetMapping;
6import org.springframework.web.bind.annotation.PathVariable;
7import org.springframework.web.bind.annotation.RestController;
8
9/**
10 * Create by ranzd on 2019/1/29
11 *
12 * @author ranzd@chinaunicom.cn
13 */
14@RestController
15public class AccountController {
16
17 @Reference(version = "1.0")
18 private OfficialHelloApi officialHelloApi;
19
20 @GetMapping("/account/{name}")
21 public String sayHello(@PathVariable(name = "name") String name) {
22 return officialHelloApi.sayHello(name);
23 }
24
25}
26
先启动生产者,再启动消费者,启动的时候如果看到 下面的日志说明启动成功了:
12019-02-12 11:09:14.780 INFO 3428 --- [ main] a.b.d.c.e.WelcomeLogoApplicationListener :
2
3 :: Dubbo Spring Boot (v0.2.1.RELEASE) : https://github.com/apache/incubator-dubbo-spring-boot-project
4 :: Dubbo (v2.6.5) : https://github.com/apache/incubator-dubbo
5 :: Discuss group : dev@dubbo.apache.org
6
72019-02-12 11:09:14.783 INFO 3428 --- [ main] e.OverrideDubboConfigApplicationListener : Dubbo Config was overridden by externalized configuration {dubbo.application.name=Provide, dubbo.application.qos-enable=false, dubbo.config.multiple=true, dubbo.protocol.name=dubbo, dubbo.protocol.port=20880, dubbo.registry.address=zookeeper://39.105.78.88:2181, dubbo.scan.base-packages=com.zdran.official.user.service}
访问一下 http://localhost:8085/account/dubbo
试试。
4. 一个疑问
有个比较疑惑的地方一直没有搞明白。就是 curator-framework 这个依赖。
明明在 dubbo-spring-boot-starter 里是包含这个依赖的,不知道为什么还需要重新引入?
转载请注明出处
本文链接:zdran.com/20190212.ht…