Dubbo微服务开发部署
Apache Dubbo是一个开源的Java微服务开发框架,ServiceStage提供扩展组件采用全Spring配置方式,透明化接入应用,可以帮助用户快速进行业务微服务化开发。
本章节将介绍如何进行微服务的开发与部署。
前提条件
- 已经在华为云上开通帐号。
- 已了解如何购买ServiceComb微服务引擎且购买了ServiceComb微服务引擎,相关操作请参考创建微服务引擎专享版。
- 有Java、Dubbo应用开发基础,了解Maven概念。
- 掌握Maven,用于管理工程依赖,会使用Maven常见的编译、打包命令。
服务运行原理
如图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>
|
创建服务提供者
- 在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); }
- 在服务提供方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)); } }
- 定义暴露接口文件。
在项目的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控制台,选择“基础设施 > 微服务引擎”查看。
- Local-CSE配置中心地址,下载本地轻量化微服务引擎,其中会包含配置中心地址。配置地址为:
- dubbo:config-center:配置中心的信息,V2.7.0后增加。有两个功能:外部化配置,启动配置的集中式存储;服务治理,服务治理规则的存储与通知。
- dubbo:protocol:服务发布的时候dubbo依赖什么协议,可以配置dubbo、webservice、Thrift、Hessain、http等协议。
- dubbo:service:服务发布的时候,通过此配置将服务发布出去。interface是接口的包路径,ref是bean id配置的接口的bean。
- 属性配置。
如果应用简单,不需要多注册中心或多协议,并且需要在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 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(); } } }
创建服务消费者
- 配置消费端属性。
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 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服务后会返回一个字符串。
构建并上传应用Jar包
- 使用IDEA分别打开两个demo工程,更改demo的配置文件,在application.yaml的配置文件中配置AK、SK、project等认证信息。
- accessKey和secretKey填写当前用户的AK、SK。
AK、SK的获取请参考访问密钥。
- project填写当前region对应的project字段,如北京4则填写cn-north-4。
- accessKey和secretKey填写当前用户的AK、SK。
- 构建应用Jar包,分别在两个项目下执行mvn install命令,在target目录下获得Jar包。
- 将软件包上传至OBS对象存储中,请参考上传文件。
创建部署price-provider组件
- 创建price-provider组件,请参考创建微服务组件。
- “选择运行时”:选择“Java8”。
- “选择框架/服务网格”:选择“Dubbo”。
- “组件名称”:输入“price-provider”。
- “源码/软件包”选择“Jar包”。
- “上传方式”选择“OBS对象存储选择”。单击“选择软件包”,选择3上传的price-provider工程Jar包。
- 部署price-provider组件,请参考部署组件。
- “环境”选择已创建的环境。
- “部署系统”使用“云容器引擎”。
- “实例数量”修改为1。
- 其他参数保持默认设置。
创建部署order-consumer组件
验证结果
等待2个组件全部部署完成,查看order-consumer组件实例的运行日志,会在日志里面显示字符串“===========================hello”。
扩展信息
您可以了解更多关于dubbo-servicecomd的相关信息,包括注册中心,配置中心。
demo链接:https://github.com/huaweicloud/dubbo-servicecomb/tree/master/integration-tests。
