Apache Dubbo(以下简称Dubbo)是一款微服务框架,提供服务提供者(Provider)和服务消费者(Consumer)之间的服务发现能力。以Dubbo微服务应用为例,本文介绍如何在本地通过XML配置的方式开发应用,并将其部署到SAE进行托管。
为什么托管到SAE
将Dubbo应用托管到SAE,您仅需关注Dubbo应用自身的逻辑,无需关注注册中心和配置中心的搭建和维护。托管后,您还可以使用SAE提供的弹性伸缩、一键启停、监控等功能,大大降低开发和运维成本。
当您的微服务应用较多时,注册中心按推荐程度由高到低依次排序如下。
商业版的服务注册中心(MSE)
搭建并部署商业版的服务注册中心(使用MSE的Nacos作为服务注册中心)的具体操作,请参见使用MSE的Nacos注册中心。
自建服务注册中心
搭建并部署自建Nacos注册中心时,您需要确认以下内容。
- 确保SAE的网络与自建Nacos的网络互通。
- 确保
-D
和-XX
参数未交替使用,以免命令失效。示例代码如下:- 修改前:
java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
- 修改后:
java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
- 修改前:
- 建议在部署应用时,使用镜像或者JAR包方式,并配置启动参数
-Dnacos.use.endpoint.parsing.rule=false
和-Dnacos.use.cloud.namespace.parsing=false
。重要 启动参数需要放在-jar
之前,否则可能会导致无法使用非SAE自带的注册中心。- 如果采用镜像方式,请将
-Dnacos.use.endpoint.parsing.rule=false
和-Dnacos.use.cloud.namespace.parsing=false
配置在镜像文件的程序启动命令中。Docker镜像制作方法,请参见制作Java镜像。示例代码如下:
RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
- 如果采用JAR包方式,请在控制台启动命令设置区域的options设置文本框输入
-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false
。图示为Open JDK 8运行环境下的Java应用。具体操作,请参见设置启动命令。
- 如果采用镜像方式,请将
SAE内置服务注册中心
SAE提供Java微服务自动寻址的Nacos Server能力,您可以通过SAE的服务注册发现功能配置。具体操作,请参见使用SAE内置Nacos。
准备工作
- 下载Maven并设置环境变量。
- 启动Nacos Server。
- 下载并解压Nacos Server。
- 进入nacos/bin目录,启动Nacos Server。
- Linux、Unix、macOS系统:执行命令
sudo sh startup.sh -m standalone
。 - Windows系统:执行命令
startup.cmd -m standalone
。
说明standalone
表示单机模式运行,非集群模式。startup.cmd文件默认以集群模式启动,因此您在使用Windows系统时,如果直接双击执行startup.cmd文件会导致启动失败,此时需要在startup.cmd文件内设置MODE="standalone"
。 更多信息,请参见Nacos快速开始。 - Linux、Unix、macOS系统:执行命令
版本说明
SAE支持托管2.5.x,2.6.x,2.7.x版本的Dubbo。推荐使用2.7.x,可以获得更强大的服务治理能力。本文将会以2.7.3版本为例,介绍如何将Dubbo应用托管到SAE。
步骤一:创建服务提供者
- 创建Maven项目并引入依赖。
- 开发Dubbo服务提供者。Dubbo中服务都是以接口的形式提供的。
- 配置Dubbo服务。
- 启动服务。
- 登录Nacos控制台
http://127.0.0.1:8848
,在左侧导航栏单击服务列表,查看提供者列表。可以看到服务提供者里已经包含了com.alibaba.edas.IHelloService
,且可以查询该服务的服务分组和提供者IP。
步骤二:创建服务消费者
- 创建Maven项目并引入依赖。
- 开发Dubbo服务提供者。Dubbo中服务都是以接口的形式提供的。
- 配置Dubbo服务。
- 启动、验证服务。
- 验证创建结果。启动后,可以看到控制台不断地输出
hello world
,表明服务消费成功。登录Nacos控制台
http://127.0.0.1:8848
,在左侧导航栏中单击服务列表,再在服务列表页面选择调用者列表。可以看到包含了
com.alibaba.edas.IHelloService
,且可以查看该服务的服务分组和调用者IP。
步骤三:部署到SAE
- 在pom.xml文件中,添加应用编译配置,并执行mvn clean package命令将本地程序编译成可执行的JAR包。
- Provider
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.Provider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
- Consumer
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.edas.Consumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
- Provider
- 将编译好的Provider和Consumer应用包部署至SAE。具体操作,请参见在SAE控制台使用JAR文件部署微服务应用。