写点什么

Dubbo 学习笔记 (三) Spring Boot 整合 Dubbo(官方版)

用户头像
U+2647
关注
发布于: 2021 年 04 月 12 日

0. 前言

这次使用的是 Apache 推出的 Spring Boot 与 Dubbo 整合的依赖。



<dependency>    <groupId>com.alibaba.boot</groupId>    <artifactId>dubbo-spring-boot-starter</artifactId>    <version>0.2.1.RELEASE</version></dependency>
复制代码

1. 创建项目

创建一个项目,三个模块分别是服务提供者、服务消费者、服务暴露的 API。


项目结构:


official    |-official-api    |-official-account-provider    |-official-web
复制代码


主 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.zdran.duboot</groupId>    <packaging>pom</packaging>    <artifactId>official</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>official</name>    <description>Demo project for Spring Boot</description>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> </parent>
<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.1.1.RELEASE</spring-boot.version> <dubbo.version>2.6.5</dubbo.version> </properties> <modules> <module>official-api</module> <module>official-account-provider</module> <module>official-web</module> </modules>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
复制代码

2. 配置服务提供者

添加依赖:


<?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">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>com.zdran.duboot</groupId>        <artifactId>official</artifactId>        <version>0.0.1-SNAPSHOT</version>    </parent>    <groupId>com.zdran.official</groupId>    <artifactId>account-provider</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>account-provider</name>    <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> <spring-boot.version>2.1.1.RELEASE</spring-boot.version> <dubbo.version>2.6.5</dubbo.version> </properties>
<dependencies> <dependency> <groupId>com.zdran.duboot</groupId> <artifactId>official-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.1.2.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.11.1</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
复制代码


更新 application.yml 的配置:


server:  port: 8086
dubbo: application: name: Provide registry: address: zookeeper://39.105.78.88:2181 protocol: name: dubbo port: 20880 scan: base-packages: com.zdran.official.user.service
复制代码


注意:配置项是 dubbo.xxx,不是 spring.dubbo.xxx


实现 Service:


package com.zdran.official.user.service;
import com.alibaba.dubbo.config.annotation.Service;import com.zdran.duboot.official.api.OfficialHelloApi;
/** * Create by ranzd on 2019/1/28 * * @author ranzd@chinaunicom.cn */@Service(version = "1.0", timeout = 50000)public class OfficialHelloApiImpl implements OfficialHelloApi { @Override public String sayHello(String name) { return "helll, " + name; }}
复制代码


接口定义在了 official-api 模块

3. 实现消费者

添加依赖:


<?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">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.2.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.zdran.official</groupId>    <artifactId>web</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>web</name>    <description>Demo project for Spring Boot</description>
<properties> <java.version>1.8</java.version> <dubbo.version>2.6.5</dubbo.version> </properties>
<dependencies> <dependency> <groupId>com.zdran.duboot</groupId> <artifactId>official-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId>
</dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.1.2.RELEASE</version> <scope>test</scope> </dependency>
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.11.1</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
</project>
复制代码


注意:curator-framework 这个依赖跟使用的 zk 版本有关系


curator-framework 2.x.x 支持的 zk 版本为 3.4.x 和 3.5.xcurator-framework 3.x.x 支持的 zk 版本为 3.5.x


更新 application.yml 的配置:


server:  port: 8085
dubbo: application: name: conusmer registry: address: zookeeper://39.105.78.88:2181 protocol: name: dubbo port: 20880 scan: base-packages: com.zdran.official.web
复制代码


创建消费者的服务


package com.zdran.official.web.controller;
import com.alibaba.dubbo.config.annotation.Reference;import com.zdran.duboot.official.api.OfficialHelloApi;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;
/** * Create by ranzd on 2019/1/29 * * @author ranzd@chinaunicom.cn */@RestControllerpublic class AccountController {
@Reference(version = "1.0") private OfficialHelloApi officialHelloApi;
@GetMapping("/account/{name}") public String sayHello(@PathVariable(name = "name") String name) { return officialHelloApi.sayHello(name); }
}
复制代码


先启动生产者,再启动消费者,启动的时候如果看到 下面的日志说明启动成功了:


2019-02-12 11:09:14.780  INFO 3428 --- [           main] a.b.d.c.e.WelcomeLogoApplicationListener : 
:: Dubbo Spring Boot (v0.2.1.RELEASE) : https://github.com/apache/incubator-dubbo-spring-boot-project :: Dubbo (v2.6.5) : https://github.com/apache/incubator-dubbo :: Discuss group : dev@dubbo.apache.org
2019-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 里是包含这个依赖的,不知道为什么还需要重新引入?

发布于: 2021 年 04 月 12 日阅读数: 15
用户头像

U+2647

关注

evolving code monkey 2018.11.05 加入

https://zdran.com/

评论

发布
暂无评论
Dubbo 学习笔记(三) Spring Boot 整合 Dubbo(官方版)