SpringCloud H系列 alibaba 2.1.1 (一) dubbo 服务端与客户端实现 (集成nacos注册中心与配置中心)

半世苍凉 提交于 2019-12-15 04:54:19

1.nacos安装

请参考 : docker 安装 nacos 1.X

2.项目父工程

请参考 : SpringCloud H系列 alibaba 2.1.1 (一) nacos1.X 注册中心 服务端

3.项目结构

4.创建Dubbo api 子工程(存放公共类)

pom.xml

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>alibaba-dubbo-api</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

TestService.java  创建测试接口

/**
 * 测试API接口
 */
public interface TestService {

    String test(String name);

}

5.创建Dubbo 服务端子工程(双端负载均衡)

首先在nacos创建两个配置文件 application-dubbo-server-1.yml 与 application-dubbo-server-2.yml

application-dubbo-server-1.yml

dubbo:
  protocol:
    # 使用dubbo协议通信
    name: dubbo
    # dubbo 协议端口(-1表示自增端口,从20880开始)
    port: -1
  # 挂载到 Spring Cloud 注册中心
  registry:
    address: spring-cloud://localhost
  scan:
    # 指定 Dubbo 服务实现类的扫描基准包
    base-packages: com.alibaba.dubbo.server.service
server:
  port: 8000

 application-dubbo-server-2.yml  将 端口改为 8001

创建服务端子工程

pom.xml

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>alibaba-dubbo-server</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>alibaba-dubbo-api</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

DubboServerApplication.java  启动类

@EnableDiscoveryClient // 开启注册中心客户端
@SpringBootApplication
public class DubboServerApplication {

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


}

TestServiceImpl.java  实现测试接口

/**
 * 测试接口实现
 */
@Service // 这里使用的是dubbo的 @Service 注解 将注册到注册中心
@RefreshScope // nacos 配置自动刷新
public class TestServiceImpl implements TestService {
    // 获取远程配置文件中的端口号
    @Value("${server.port:}")
    private String port;

    @Override
    public String test(String name) {
        return "服务器::端口:"+port+"::返回值 => " + name;
    }

}

bootstrap.yml 配置文件  (一号服务器)

spring:
  application:
    name: alibaba-dubbo-server
  cloud:
    # Nacos 服务发现与注册配置
    nacos:
      discovery:
        server-addr: 192.168.1.141:8848
      config:
        # 配置中心地址
        server-addr: 192.168.1.141:8848
        # 文件后缀
        file-extension: yml
        # 文件前缀
        prefix: application-dubbo-server-1
        # 命名空间ID
        namespace: 21c7d9a6-4b92-4313-b28b-7ba5a9328902

二号服务器 将 prefix  改为  application-dubbo-server-2

启动 一号 与 二号 服务器 

点击1所在 查看nacos服务列表

2所在 是服务名

3所在 是服务实例数量  与  健康数量

点击4所在  查看服务详情

一号二号服务器 启动注册成功

6.创建Dubbo 客户端子工程

首先在nacos创建配置文件 application-dubbo-client.yml

dubbo:
  cloud:
    # 订阅服务名
    subscribed-services: alibaba-dubbo-server
  protocol:
    # 使用dubbo协议通信
    name: dubbo
    # dubbo 协议端口(-1表示自增端口,从20880开始)
    port: -1
  # 挂载到 Spring Cloud 注册中心
  registry:
    address: spring-cloud://localhost
server:
  port: 8002

创建服务端子工程

pom.xml

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>alibaba-dubbo-client</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>alibaba-dubbo-api</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

 DubboClientApplication.java  启动类

@EnableDiscoveryClient  // 开启注册中心客户端
@SpringBootApplication
public class DubboClientApplication {

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

}

TestController.java  外部暴露接口

@Slf4j
@RestController
public class TestController {

    @Reference // dubbo注入接口 从nacos注册中心获取服务器地址
    private TestService testService;

    @GetMapping("/test")
    public String test(String name) {
        // 远程调用服务端接口
        return testService.test(name);
    }
}

bootstrap.yml

spring:
  application:
    name: alibaba-dubbo-client
  cloud:
    # Nacos 服务发现与注册配置
    nacos:
      discovery:
        server-addr: 192.168.1.141:8848
      config:
        # 配置中心地址
        server-addr: 192.168.1.141:8848
        # 文件后缀
        file-extension: yml
        # 文件前缀
        prefix: application-dubbo-client
        # 命名空间ID
        namespace: 21c7d9a6-4b92-4313-b28b-7ba5a9328902

启动 客户端 查看nacos服务列表

服务注册成功

7.测试 功能 与 服务端负载均衡

请求客户端接口  localhost:8002/test?name=Lion Li

一号服务器响应

dubbo默认负载均衡策略为随机  所以需要尝试多请求几次

二号服务器响应

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!