Dubbo SpringBoot简单RPC调用记录

一、注册中心 Zookeeper

1.1 docker-compose 伪集群部署

复制自 DockerHub,docker-compose-zookeeper.yaml

version: '3.1'

services:
  zoo1:
    image: zookeeper
    restart: always
    hostname: zoo1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

运行:

docker-compose -f docker-compose-zookeeper.yaml up -d

二、管理控制台 Dubbo Admin

2.1 docker-compose 部署

伪集群部署 zookeeper 时会创建一个网络。教主的docker-compose-zookeeper.yaml 文件放在 /d/docker/zookeeper/下,所以创建了一个名为 zookeeper_default的网络。现在 dubbo-admin 需要访问 zookeeper 伪集群的容器的网络,需要将 dubbo-admin 加入至该网络。

docker network ls

在这里插入图片描述

version: '3'

services:
  admin:
    image: apache/dubbo-admin
    ports:
      - 8080:8080
    environment:
      - admin.registry.address=zookeeper://zoo1:2181
      - admin.config-center=zookeeper://zoo1:2181
      - admin.metadata-report.address=zookeeper://zoo1:2181
    networks:
      - zookeeper_default

networks:
  zookeeper_default:
    external: true

给容器传递环境变量时,以 docker-compose 的『服务名』代替 IP 地址:
在这里插入图片描述

运行:

docker-compose -f docker-compose-dubbo-admin.yaml up -d

访问:

http://127.0.0.1:8080

2.2 版本相关

DockerHub 里的镜像还是很久很久之前更新的,最新版本为 0.1.0。但是 https://github.com/apache/dubbo-admin 目录中却又有 0.2.0 版本的 Dockerfile,然而经过自己构建测试(时间:2020-05-27)似乎并没有什么不同(界面稍微变好看了一点点)。

在这里插入图片描述

2.3 jar 包部署和前后端分离部署相关

根据官网描述:

QUOTE http://dubbo.apache.org/zh-cn/docs/admin/introduction.html
在这里插入图片描述

然而,如果直接进行 mvn clean package 会报一堆错误,解决方案为跳过测试:

mvn clean package -Dmaven.test.skip=true

在这里插入图片描述

另外,可能还会因为网络原因,node 未下载完整可能也会报一堆错误,解决方案为删除下载不完整的包:

在这里插入图片描述

2.4 其它相关

dubbo-amdin 的 docker 镜像默认没有登录密码,而 GitHub 的源码包是配置有登录密码的。右图为 Dockerfile 构建的源码包中的配置文件:

在这里插入图片描述


三、Dubbo 简单的 RPC 调用

3.1 Maven 创建接口模块 hello-dubbo-demo-api

3.1.1 GAV 坐标
  <groupId>xyz.icefery.dubbodemo</groupId>
  <artifactId>hello-dubbo-demo-api</artifactId>
  <version>1.0.0-SNAPSHOT</version>
3.1.2 接口
package xyz.icefery.dubbodemo.hello.dubbo.demo.api;

public interface DemoService {
    String sayHello();
}
3.1.3 安装到本地仓库
mvn clean install

3.2 SpringBoot 创建提供者模块 hello-dubbo-demo-provider

3.2.1 GAV 坐标
  <groupId>xyz.icefery.dubbodemo</groupId>
  <artifactId>hello-dubbo-demo-provider</artifactId>
  <version>1.0.0-SNAPSHOT</version>
3.2.2 引入 dubbo 相关依赖
    <dependency>
      <groupId>com.alibaba.boot</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>0.2.0</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba.boot</groupId>
      <artifactId>dubbo-spring-boot-actuator</artifactId>
      <version>0.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
3.2.3 引入接口依赖
    <dependency>
      <groupId>xyz.icefery.dubbodemo</groupId>
      <artifactId>hello-dubbo-demo-api</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
3.2.4 实现接口

使用 dubbo 的 @Service注解:

package xyz.icefery.dubbodemo.hello.dubbo.demo.provider.api.impl;

import com.alibaba.dubbo.config.annotation.Service;
import xyz.icefery.dubbodemo.hello.dubbo.demo.api.DemoService;

@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello() {
        return "Hello Dubbo";
    }
}
3.2.5 main 函数启动 provider 容器
package xyz.icefery.dubbodemo.hello.dubbo.demo.provider;

import com.alibaba.dubbo.container.Main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloDubboDemoProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloDubboDemoProviderApplication.class, args);
        
        Main.main(args);
    }
}
3.2.6 配置文件

application.yaml

spring:
  application:
    name: hello-dubbo-demo-provider

dubbo:
  scan:
    basePackages: xyz.icefery.dubbodemo.hello.dubbo.demo.provider.api
  application:
    id: hello-dubbo-demo-provider
    name: hello-dubbo-demo-provider
    qos-port: 22222
    qos-enable: true
  protocol:
    id: dubbo
    name: dubbo
    port: 20880
    status: server
  registry:
    id: zookeeper
    address: zookeeper://127.0.0.1:2181

management:
  endpoint:
    dubbo:
      enabled: true
    dubbo-shutdown:
      enabled: true
    dubbo-configs:
      enabled: true
    dubbo-services:
      enabled: true
    dubbo-references:
      enabled: true
    dubbo-properties:
      enabled: true
  health:
    dubbo:
      status:
        defaults: memory
        extras: load,threadpool

3.3 SpringBoot 创建消费者模块 hello-dubbo-demo-consumer

3.3.1 GAV 坐标
  <groupId>xyz.icefery.dubbodemo</groupId>
  <artifactId>hello-dubbo-demo-consumer</artifactId>
  <version>1.0.0-SNAPSHOT</version>
3.3.2 dubbo 相关依赖

dubbo 相关依赖和提供者模块的 dubbo 相关依赖相同。

3.3.3 web 依赖
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
3.3.4 RPC 调用

使用 dubbo 的 @Reference注解:

package xyz.icefery.dubbodemo.hello.dubbo.demo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import xyz.icefery.dubbodemo.hello.dubbo.demo.api.DemoService;

@RestController
public class DemoController {
    @Reference(version = "1.0.0")
    private DemoService demoService;

    @RequestMapping(value = "/hello")
    public String sayHi() {
        return demoService.sayHello();
    }
}
3.3.5 配置文件

application.yaml

spring:
  application:
    name: hello-dubbo-demo-consumer

server:
  port: 9090

dubbo:
  scan:
    base-packages: xyz.icefery.dubbodemo.hello.dubbo.demo.consumer.controller
  application:
    id: hello-dubbo-demo-consumer
    name: hello-dubbo-demo-consumer
  registry:
    id: zookeeper
    address: zookeeper://127.0.0.1:2181

endpoints:
  dubbo:
    enabled: true

management:
  server:
    port: 9091
  health:
    dubbo:
      status:
        defaults: memory
  endpoint:
    dubbo:
      enabled: true
    dubbo-shutdown:
      enabled: true
    dubbo-configs:
      enabled: true
    dubbo-services:
      enabled: true
    dubbo-references:
      enabled: true
    dubbo-properties:
      enabled: true
    endpoints:
      web:
        exposure:
          include: "*"

3.4 启动

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值