03、Dubbo基础:Dubbo3.0使用Nacos2.0注册中心入门案例

环境搭建

1. 安装Nacos2.0

参考文档

*

2. 创建spring boot基础工程

创建一个父工程,三个子工程:

  • 服务提供方
  • 服务提供方接口
  • 服务消费方

*

引入依赖

说明

去alibaba看了下spring-cloud-starter-dubbo,发现最新版dubbo版本停留在2.7.x系列。
*
然后搜了下dubbo-spring-boot-project,发现已经被移入到dubbo仓库中去了。
*
然后找到dubbo源码,发现了dubbo集成spring boot的相关代码,所以这里直接使用spring boot集成包,cloud的版本可能还要等等,这里要注意一下。
*

父工程依赖

主要指定各版本依赖,重点是dubbo-bom。

<?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>org.example</groupId>
    <artifactId>dubbo-demo-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-demo-produce</module>
        <module>dubbo-demo-produce-api</module>
        <module>dubbo-demo-consume</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--Spring-->
        <spring.boot.version>2.2.13.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR3</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <!--Spring版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>3.0.2.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>aliyun-repos</id>
            <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>apache.snapshots.https</id>
            <name>Apache Development Snapshot Repository</name>
            <url>https://repository.apache.org/content/repositories/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>aliyun-plugin</id>
            <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

子工程依赖(提供,消费方都需要引入)

主要引入dubbo和nacos相关pom,这里没指定版本,因为是由dubbo-bom控制了。

<?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>org.example</groupId>
        <artifactId>dubbo-demo-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>org.pearl</groupId>
    <artifactId>dubbo-demo-produce</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-demo-produce</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <dubbo.version>3.0.2</dubbo.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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-registry-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>dubbo-demo-produce-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

集成dubbo

服务提供方

1、 yml添加springboot基础配置及dubbo配置;

spring:
  application:
    name: dubbo-demo-produce
server:
  port: 8888
dubbo:
  # 注册中心地址
  registry:
    address: nacos://127.0.0.1:8848
  # 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
  protocol:
    port: 20880
    name: dubbo

1、 dubbo-demo-produce-api包创建服务接口,提供方需要实现它,消费方则需要注入这个接口;

public interface DemoService {
   
     

    String sayName(String name);
    String sayHello(String name);

    default CompletableFuture<String> sayHelloAsync(String name) {
   
     
        return CompletableFuture.completedFuture(sayHello(name));
    }
}

1、 提供方实现接口,并使用@DubboService注解发布到注册中心,(之前是@Service);

@DubboService(version = "1.0.0")
@Service
public class DemoServiceImpl implements DemoService {
   
     

    @Override
    public String sayName(String name) {
   
     
        return name;
    }

    @Override
    public String sayHello(String name) {
   
     
        return "Hello " + name + ", response from provider: " + RpcContext.getServiceContext().getLocalAddress();
    }

    @Override
    public CompletableFuture<String> sayHelloAsync(String name) {
   
     
        return null;
    }
}

1、 启动类添加@EnableDubbo注解,扫描提供方配置的远程注册接口;

@SpringBootApplication
@EnableDubbo(scanBasePackages = "org.pearl.dubbodemoproduce.service")
public class DubboDemoProduceApplication {
   
     

    public static void main(String[] args) {
   
     
        SpringApplication.run(DubboDemoProduceApplication.class, args);
    }

}

服务消费方

1、 和提供方一样,添加配置,启动类添加注解即可,注意服务名称需要换;
*
2、 远程调用提供方服务,使用@DubboReference注解引入api包中的接口(之前是@Reference);

@RestController
@RequestMapping("/user")
public class TestController {
   
     
    @DubboReference(check = false,version ="1.0.0")
    DemoService demoService;

    @RequestMapping("/test")
    public String test() {
   
     
       return demoService.sayName("haha");
    }
}

测试

1. 启动nacos、提供方、消费方

查询nacos控制台,可发现,服务被成功注册了上来。
*
点击详情,可以看到提供接口元数据的详细信息。
*

2. 调用接口

我们访问消费方的接口,发现,成功调用了提供方的接口,案例完成。
*

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: