文档首页 > > 快速入门>

Dubbo微服务开发部署

Dubbo微服务开发部署

分享
更新时间:2021/02/08 GMT+08:00

Apache Dubbo是一个开源的Java微服务开发框架,ServiceStage提供扩展组件采用全Spring配置方式,透明化接入应用,可以帮助用户快速进行业务微服务化开发。

本章节将介绍如何进行微服务的开发与部署。

前提条件

  • 已经在华为云上开通帐号。
  • 已了解如何购买ServiceComb微服务引擎且购买了ServiceComb微服务引擎,相关操作请参考创建微服务引擎专享版
  • 有Java、Dubbo应用开发基础,了解Maven概念。
  • 掌握Maven,用于管理工程依赖,会使用Maven常见的编译、打包命令。

服务运行原理

图1 服务运行原理

图1所示:

  • consumer与provider是开发者开发出的微服务。
  • 开发者到控制台购买微服务引擎,并将服务连接到引擎上使用。
  • 服务通过注册到Service center中让别的服务发现地址以实现通信,通过配置管理服务管理配置项。

开发第一个微服务

本地开发使用dubbo-servicecomb。请参考样例,开始开发第一个微服务。

配置POM依赖。dubbo-servicecomb支持Dubbo 2.6.x和2.7.x两大主力版本:

  • 2.6.x版本,Dubbo原生依赖主要是com.alibaba。
  • 2.7.x版本,Dubbo原生依赖是org.apache。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
  <modelVersion>4.0.0</modelVersion>
  <artifactId>price-provider-test</artifactId>

  <dependencies>
    <dependency>
      <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
      <artifactId>discovery-common-api</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>com.huaweicloud.dubbo-servicecomb</groupId>
      <artifactId>dubbo-servicecomb-config-center</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-config-spring</artifactId>
    </dependency>
  ........
</dependencies>

创建服务提供者

  1. 在PriceService.java中定义服务接口。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package com.huaweicloud.it.price;
    
    import java.util.concurrent.CompletableFuture;
    
    public interface PriceService {
      String sayHello(String name);
    
      CompletableFuture<String> sayHelloAsync(String name);
    }
    
  2. 在服务提供方PriceServiceImpl.java中实现接口。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package com.huaweicloud.it.price;
    
    import java.util.concurrent.CompletableFuture;
    
    public class PriceServiceImpl implements PriceService {
      @Override
      public String sayHello(String name) {
        if ("timeout".equals(name)) {
          try {
            Thread.sleep(3000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
        return name;
      }
    
      @Override
      public CompletableFuture<String> sayHelloAsync(String name) {
        return CompletableFuture.completedFuture(sayHello(name));
      }
    }
    
  3. 定义暴露接口文件。

    在项目的resources目录下创建META-INF.spring包,再创建dubbo-provider.xml文件,名字可以任取。

    dubbo-provider.xml文件内容如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
      xmlns="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
      <dubbo:application name="price-provider"/>
      <dubbo:registry address="sc://127.0.0.1:30100"/>
      <dubbo:config-center address="sc://127.0.0.1:30100"/>
      <dubbo:protocol name="dubbo" port="9122"/>
    
      <dubbo:service interface="com.huaweicloud.it.price.PriceService" ref="priceService"/>  
      <bean id="priceService" class="com.huaweicloud.it.price.PriceServiceImpl"/>  
    </beans>
    
    • dubbo:application:整个项目在分布式架构中的唯一名称,可以在name属性中配置,另外还可以配置owner字段,表示属于谁。
    • dubbo:registry:注册中心的信息,这里可以配置CSE或者本地Local-CSE作为我们的注册中心。address是注册中心的地址。 dubbo-servicecomb使用CSE提供的分布式注册中心 。
      • Local-CSE配置中心地址,下载本地轻量化微服务引擎,其中会包含配置中心地址。配置地址为:
        1
        2
        dubbo.servicecomb.registry.address=http://127.0.0.1:30100
        dubbo.servicecomb.config.address=http://127.0.0.1:30113
        
      • CSE配置中心地址,登录ServiceStage控制台,选择“基础设施 > 微服务引擎”查看。
    • dubbo:config-center:配置中心的信息,V2.7.0后增加。有两个功能:外部化配置,启动配置的集中式存储;服务治理,服务治理规则的存储与通知。
    • dubbo:protocol:服务发布的时候dubbo依赖什么协议,可以配置dubbo、webservice、Thrift、Hessain、http等协议。
    • dubbo:service:服务发布的时候,通过此配置将服务发布出去。interface是接口的包路径,ref是bean id配置的接口的bean。
  4. 属性配置。

    如果应用简单,不需要多注册中心或多协议,并且需要在spring容器中共享配置,可以直接使用dubbo.properties作为默认配置。

    在配置文件dubbo.properties增加配置项,基本配置项包括微服务信息、微服务实例信息、服务中心和注册中心地址信息。

    在resources目录下直接创建dubbo.properties.xml文件:

    dubbo.properties文件内容如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    dubbo.application.qos.port=22222
    
    #### 服务配置信息 ####
    # 所属应用
    dubbo.servicecomb.service.application=discovery
    # 服务名称
    dubbo.servicecomb.service.name=price-provider
    # 版本默认为 1.0.0.0
    dubbo.servicecomb.service.version=1.0.0
    # 环境默认为空可选值development, testing, acceptance, production
    # dubbo.servicecomb.service.environment=production
    # project 默认为 default
    # dubbo.servicecomb.service.project=
    #### END
    
    #### 实例配置信息 ####
    # 实例初始状态可选值 UP, DOWN, STARTING, OUTOFSERVICE
    # dubbo.servicecomb.instance.initialStatus=UP
    #### END
    
    #### 服务中心配置信息 ####
    dubbo.servicecomb.registry.address=http://127.0.0.1:30100
    
    #### 配置中心配置信息 ####
    dubbo.servicecomb.config.address=http://127.0.0.1:30113
    

    配置优先级:properties里的配置默认会重写xml里面的配置,意味着如果xml里有和properties同样的配置项,会使用properties里的配置。

    微服务引擎接入需要使用HTTPS,并且需要提供认证信息。 在配置文件增加如下配置即可:

    #### 服务中心配置信息####
    dubbo.servicecomb.registry.address=https://cse.cn-north-1.myhuaweicloud.com
    
    #### 配置中心配置信息 ####
    dubbo.servicecomb.config.address=https://cse.cn-north-1.myhuaweicloud.com
     
    #### SSL 配置信息  ####
    dubbo.servicecomb.ssl.enabled=true
     
    #### AK/SK 认证配置  ####
    dubbo.servicecomb.credentials.enabled=true
    dubbo.servicecomb.credentials.accessKey= Your access key
    dubbo.servicecomb.credentials.secretKey= Your secret key
    dubbo.servicecomb.credentials.project=cn-north-1
  1. 发布接口。

    PriceApplication.java文件内容如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    public class PriceApplication {
      public static void main(String[] args) throws Exception {
        try {
          ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
              "classpath*:spring/dubbo-provider.xml", "classpath*:spring/dubbo-servicecomb.xml");
          context.start();
          System.in.read();
        } catch (Throwable e) {
          e.printStackTrace();
        }
      }
    }
    

创建服务消费者

  1. 配置消费端属性。

    dubbo.properties文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    dubbo.application.qos.port=33333
    dubbo.servicecomb.service.application=discovery
    dubbo.servicecomb.service.name=order-consumer
    dubbo.servicecomb.service.version=1.0.0
    
    #### 服务中心配置信息 ####
    dubbo.servicecomb.registry.address=http://127.0.0.1:30100
    #### 配置中心配置信息 ####
    dubbo.servicecomb.config.address=http://127.0.0.1:30113
    
  1. 调用服务。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.huaweicloud.it.price.PriceService;
    
    public class OrderApplication {
      public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "classpath*:spring/dubbo-provider.xml", "classpath*:spring/dubbo-servicecomb.xml");
        context.start();
    
        PriceService priceService = context.getBean("priceService", PriceService.class);
        System.out.println(priceService.sayHello("Hello, World"));
        System.in.read();
      }
    }
    

创建并部署应用

可以使用已经准备好的样例代码进行部署,样例Demo包含price-provider与order-consumer两个服务,order-consumer服务调用price-provider服务后会返回一个字符串。

创建并部署应用前的准备工作如下:

  • 已经参考创建应用创建应用。
  • 已经参考创建环境创建环境,包含CCE集群、ELB及微服务引擎等资源。

构建并上传应用Jar包

  1. 使用IDEA分别打开两个demo工程,更改demo的配置文件,在application.yaml的配置文件中配置AK、SK、project等认证信息。

    • accessKey和secretKey填写当前用户的AK、SK。

      AK、SK的获取请参考访问密钥

    • project填写当前region对应的project字段,如北京4则填写cn-north-4。

  2. 构建应用Jar包,分别在两个项目下执行mvn install命令,在target目录下获得Jar包。
  3. 将软件包上传至OBS对象存储中,请参考上传文件

创建部署price-provider组件

  1. 创建price-provider组件,请参考创建微服务组件

    1. “选择运行时”:选择“Java8”
    2. “选择框架/服务网格”:选择“Dubbo”
    3. “组件名称”:输入“price-provider”
    4. “源码/软件包”选择“Jar包”。
    5. “上传方式”选择“OBS对象存储选择”。单击“选择软件包”,选择3上传的price-provider工程Jar包。

  2. 部署price-provider组件,请参考部署组件

    1. “环境”选择已创建的环境。
    2. “部署系统”使用“云容器引擎”
    3. “实例数量”修改为1。
    4. 其他参数保持默认设置。

创建部署order-consumer组件

  1. 创建order-consumer组件,请参考创建微服务组件

    1. “选择运行时”:选择“Java8”
    2. “选择框架/服务网格”:选择“Dubbo”
    3. “组件名称”:输入“order-consumer”
    4. “源码/软件包”选择“Jar包”。
    5. “上传方式”选择“OBS对象存储选择”。单击“选择软件包”,选择3上传的order-consumer工程Jar包。

  2. 部署price-provider组件,请参考部署组件

    1. “环境”选择已创建的环境。
    2. “部署系统”使用“云容器引擎”
    3. “实例数量”修改为1。
    4. 其他参数保持默认设置。

验证结果

等待2个组件全部部署完成,查看order-consumer组件实例的运行日志,会在日志里面显示字符串“===========================hello”。

扩展信息

您可以了解更多关于dubbo-servicecomd的相关信息,包括注册中心,配置中心。

demo链接:https://github.com/huaweicloud/dubbo-servicecomb/tree/master/integration-tests

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问