侧边栏壁纸
博主头像
樯哥的技术分享网博主等级

学无止境,学以致用,志存高远。

  • 累计撰写 17 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Dubbo使用Nacos作为注册中心

随心
2023-06-20 / 0 评论 / 0 点赞 / 62 阅读 / 6458 字

本文主要讲解dubbo项目基本搭建过程,使用nacos作为注册中心。至于如何安装nacos,我前面的文章已经讲解过,本文不再重复。

一、搭建项目

  1. 创建一个父模块项目,引入springboot常用基础依赖,这里使用springboot3版本。在pom.xml文件底部引入如下配置:

    <profiles>
            <profile>
                <id>dev</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <!-- 开发环境 -->
                    <profile.name>dev</profile.name>
                    <!--nacos服务访问地址-->
                    <nacos.server-addr>127.0.0.1:8848</nacos.server-addr>
                    <!--命名空间id-->
                    <nacos.namespace>75d49a80-72f9-4b15-97b8-08ad100100b0</nacos.namespace>
                    <!--nacos用户名和密码-->
                    <nacos.username>nacos</nacos.username>
                    <nacos.password>nacos</nacos.password>
                </properties>
            </profile>
            <profile>
                <id>test</id>
                <properties>
                    <!-- 测试环境,打包命令:mvn clean install -Ptest -->
                    <profile.name>test</profile.name>
                    <nacos.server-addr>127.0.0.1:8848</nacos.server-addr>
                    <nacos.namespace></nacos.namespace>
                    <nacos.username></nacos.username>
                    <nacos.password></nacos.password>
                </properties>
            </profile>
            <profile>
                <id>prod</id>
                <properties>
                    <!-- 生产环境,打包命令:mvn clean install -Pprod -->
                    <profile.name>prod</profile.name>
                    <nacos.server-addr>127.0.0.1:8848</nacos.server-addr>
                    <nacos.namespace></nacos.namespace>
                    <nacos.username></nacos.username>
                    <nacos.password></nacos.password>
                </properties>
            </profile>
        </profiles>

    上述配置中,配置了nacos服务器地址,用户名信息,可以很方便的进行环境切换。而后面的子模块的配置也可以直接读取上述配置。

  2. 创建一个子模块,名为service-dubbo-api,该模块用于编写公共的接口。我们编写一个接口示例:

    public interface DemoService {
        String test();
    }
  3. 我们再创建两个子模块service-dubbo-consumer和service-dubbo-provider,两个子模块分别引入如下相同的依赖。同时引入上一步骤中创建的模块作为依赖,下面xml中没有列出,需自行引入service-dubbo-api。

             <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>2.2.3</version>
            </dependency>

    注意:很多地方引入的依赖是:dubbo-registry-nacos,实际上上述两个依赖就已经包含了dubbo-registry-nacos依赖中的内容,所以没必要。

  4. 编写service-dubbo-provider模块,我们在该模块中编写service-dubbo-api模块中DemoService接口的实现类,并且使用@DubboService注解标注,dubbo服务最终会根据该注解找到所有实现的服务,并注册到注册中心。

    @DubboService
    public class DemoServiceImpl implements DemoService {
        @Override
        public String test() {
            return "hello world";
        }
    }

    该模块的application.yaml配置文件内容如下:

    server:
      port: 8009
    spring:
      application:
        name: dubbo-provider
    dubbo:
      application:
        name: ${spring.application.name} #必须指定服务名,作用和微服务中spring.application.name的作用类似
        qos-port: 18009 #该端口需要手动指定,否则多个服务的默认值会导致冲突。
      registry:
        address: nacos://localhost:8848?username=@nacos.username@&password=@nacos.password@
        parameters.namespace: @nacos.namespace@ #nacos命名空间
        register-mode: interface #instance 向注册中心注册应用级服务,会注册一个名为dubbo-provider的服务 interface 注册接口级服务 all 同时注册

    register-mode的默认值是all,可以将整个模块作为一个服务注册到nacos中,同时还会将具体的@DubboService注解的相关服务注册到注册中心。

    然后在启动类上使用@EnableDubbo注解标注。

    @EnableDubbo
    @SpringBootApplication
    public class ServiceDubboProviderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceDubboProviderApplication.class, args);
        }
    
    }
  5. 编写service-dubbo-consumer模块,编写一个controller使用服务提供者提供的服务实现,代码如下:

    @RestController
    @RequestMapping
    public class TestController {
        @DubboReference
        DemoService demoService;
    
        @GetMapping("/")
        public String test() {
            return demoService.test();
        }
    }

    启动类和服务提供者类似,加上@EnableDubbo注解即可。

    @EnableDubbo
    @SpringBootApplication
    public class ServiceDubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceDubboConsumerApplication.class, args);
        }
    
    }

    application.yaml配置文件和服务提供者也是类似,只有端口号和服务名不同。

    server:
      port: 8008
    spring:
      application:
        name: dubbo-consumer
    dubbo:
      application:
        name: ${spring.application.name} #必须指定服务名,作用和微服务中spring.application.name的作用类似
        qos-port: 18008 #该端口需要手动指定,否则多个服务的默认值会导致冲突。
      registry:
        address: nacos://localhost:8848?username=@nacos.username@&password=@nacos.password@
        parameters.namespace: @nacos.namespace@ #nacos命名空间
        register-mode: interface #instance 向注册中心注册应用级服务,会注册一个名为dubbo-provider的服务 interface 注册接口级服务 all 同时注册
  6. 先启动nacos,然后启动service-dubbo-provider模块,最后启动service-dubbo-consumer模块,注意启动顺序。最后访问localhost:8008 观看效果。

0

评论区