开发者社区> 问答> 正文

如何将 Dubbo 应用托管到 SAE?

如何将 Dubbo 应用托管到 SAE?

展开
收起
小天使爱美 2020-03-27 11:50:14 1290 0
1 条回答
写回答
取消 提交回答
  • 本文以包含服务提供者 Provider 和服务消费者 Consumer 的 Dubbo 微服务应用为例,介绍如何在本地通过 XML 配置的方式,开发 Dubbo 微服务示例应用,并部署到 SAE。

    为什么托管到 SAE 将 Dubbo 应用托管到 SAE,您仅需关注 Dubbo 应用自身的逻辑,无需再关注注册中心和配置中心搭建和维护,托管后还可以使用 SAE 提供的弹性伸缩、一键启停、监控等功能,大大降低开发和运维成本。

    说明 如果您坚持使用自建 Nacos 为服务注册中心,请参见如何搭建 Nacos 为服务注册中心(不推荐)进行搭建。 准备工作 在开始开发前,请确保您已经完成以下工作:

    下载 Maven 并设置环境变量。 下载最新版本的 Nacos Server。 按以下步骤启动 Nacos Server。 解压下载的 Nacos Server 压缩包 进入nacos/bin目录,启动 Nacos Server。 Linux/Unix/Mac 系统:执行命令sh startup.sh -m standalone。 Windows 系统:双击执行startup.cmd文件。 说明 在本地开发应用时,可以使用 Alibaba Cloud Toolkit 插件实现本地应用和部署在 EDAS 中的应用的相互调用,即端云互联,而无需搭建 VPN,帮助您提升开发效率。详情请参见为 EDAS 应用设置端云互联。

    创建服务提供者 在本地创建一个提供者应用工程,添加依赖,配置服务注册与发现,并将注册中心指定为 Nacos。

    创建 Maven 项目并引入依赖。 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个 Maven 项目。 在pom.xml文件中添加 dubbo、dubbo-registry-nacos 和 nacos-client 依赖。

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.3</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
        <version>2.7.3</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>1.1.1</version>
    </dependency>
    


    开发 Dubbo 服务提供者。 Dubbo 中服务都是以接口的形式提供的。 在src/main/java路径下创建一个 package com.alibaba.edas。 在com.alibaba.edas下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。 package com.alibaba.edas;

    public interface IHelloService { String sayHello(String str); }
    在com.alibaba.edas下创建一个类IHelloServiceImpl,实现此接口。 package com.alibaba.edas;

    public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
    配置 Dubbo 服务。 在 src/main/resources路径下创建 provider.xml文件并打开。 在provider.xml中,添加 Spring 相关的 XML Namespace(xmlns) 和 XML Schema Instance(xmlns:xsi),以及 Dubbo 相关的 Namespace(xmlns:dubbo) 和 Scheme Instance(xsi:schemaLocation)。

    在 provider.xml 中将接口和实现类暴露成 Dubbo 服务。 <dubbo:application name="demo-provider"/>

    <dubbo:protocol name="dubbo" port="28082"/>

    <dubbo:service interface="com.alibaba.edas.IHelloService" ref="helloService"/>


    在provider.xml中将注册中心指定为本地启动的 Nacos Server。 <dubbo:registry address="nacos://127.0.0.1:8848" />
    127.0.0.1为 Nacos Server 的地址。如果您的 Nacos Server 部署在另外一台机器,则需要修改成对应的 IP 地址。当将应用部署到 EDAS 后,无需做任何修改,注册中心会替换成EDAS上的注册中心的地址。 8848为 Nacos Server 的端口号,不可修改。 启动服务。 在 com.alibaba.edas中创建类 Provider,并按下面的代码在 Provider 的 main 函数中加载 Spring Context,将配置好的 Dubbo 服务暴露。 package com.alibaba.edas;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); } }
    执行 Provider 的 main 函数,启动服务。 登录 Nacos 控制台 http://127.0.0.1:8848,在左侧导航栏中单击服务列表 ,查看提供者列表。可以看到服务提供者里已经包含了 com.alibaba.edas.IHelloService,且可以查询该服务的服务分组和提供者 IP。 创建服务消费者 在本地创建一个消费者应用工程,添加依赖,添加订阅服务的配置。

    创建 Maven 项目并引入依赖。 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个 Maven 项目。 在pom.xml文件中添加 dubbo、dubbo-registry-nacos 和 nacos-client 依赖。

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.3</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
        <version>2.7.3</version>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>1.1.1</version>
    </dependency>
    


    开发 Dubbo 服务提供者。 Dubbo 中服务都是以接口的形式提供的。 在src/main/java路径下创建 package com.alibaba.edas。 在com.alibaba.edas下创建一个接口(interface) IHelloService,里面包含一个 SayHello 方法。 说明 通常是在一个单独的模块中定义接口,服务提供者和服务消费者都通过 Maven 依赖来引用此模块。本文档为了简便,服务提供者和服务消费者分别创建两个完全一模一样的接口,实际使用中不推荐这样使用。 package com.alibaba.edas;

    public interface IHelloService { String sayHello(String str); }
    配置 Dubbo 服务。 在 src/main/resources路径下创建 consumer.xml文件并打开。 在consumer.xml中,添加 Spring 相关的 XML Namespace(xmlns) 和 XML Schema Instance(xmlns:xsi),以及 Dubbo 相关的 Namespace(xmlns:dubbo) 和 Scheme Instance(xsi:schemaLocation)。
    在 consumer.xml 中添加如下配置,订阅 Dubbo 服务 <dubbo:application name="demo-consumer"/>

    <dubbo:registry address="nacos://127.0.0.1:8848"/>

    <dubbo:reference id="helloService" interface="com.alibaba.edas.IHelloService"/> 启动、验证服务。 在com.alibaba.edas下创建类 Consumer,并按下面的代码在 Consumer 的 main 函数中加载 Spring Context,订阅并消费 Dubbo 服务。 package com.alibaba.edas;

    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import java.util.concurrent.TimeUnit;
    
    public class Consumer {
        public static void main(String[] args) throws Exception {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});
            context.start();
            while (true) {
                try {
                    TimeUnit.SECONDS.sleep(5);
                    IHelloService demoService = (IHelloService)context.getBean("helloService");
                    String result = demoService.sayHello("world");
                    System.out.println(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }               
    

    执行 Consumer 的 main 函数,启动服务。 验证创建结果。 启动后,可以看到控制台不断地输出 hello world,表明服务消费成功。 登录 Nacos 控制台 http://127.0.0.1:8848,在左侧导航栏中单击服务列表 ,再在服务列表页面选择调用者列表。

    可以看到包含了 com.alibaba.edas.IHelloService,且可以查看该服务的服务分组和调用者 IP。

    步骤四:部署到 SAE 分别在 Provider 和 Consumer 的 pom.xml 文件中添加如下配置,配置完成后执行 mvn clean package 将本地程序编译为可执行的 JAR 包。 Provider org.springframework.boot spring-boot-maven-plugin repackage spring-boot com.alibaba.sae.Provider

    Consumer org.springframework.boot spring-boot-maven-plugin repackage spring-boot com.alibaba.sae.Consumer

    部署微服务应用到 SAE。 说明 使用自建Nacos时请确保SAE的网络与自建Nacos的网络互通。 使用自建Nacos为服务注册中心,在部署应用时建议使用镜像方式或者JAR包方式,并配置启动参数-Dnacos.use.endpoint.parsing.rule=false和-Dnacos.use.cloud.namespace.parsing=false。 如采用镜像方式,请将-Dnacos.use.endpoint.parsing.rule=false和-Dnacos.use.cloud.namespace.parsing=false配置在镜像文件中。 如果JAR包方式,请在部署时启动命令中设置。SAE自建Nacos部署应用之启动命令 如果您不熟悉如何制作Docker镜像,具体操作请参见制作应用容器Docker镜像。

    更多信息 在SAE部署完成后,您可以对应用进行更新、扩缩容、启停、删除应用等生命周期管理操作,具体操作方式请参见管理应用生命周期。 在SAE部署完成后,您可以对应用进行自动弹性伸缩、SLB绑定和批量启停等提升应用性能的操作,具体操作方式请参见如下文档。 绑定SLB 配置弹性伸缩 一键启停应用 配置管理 变更实例规格 在SAE部署完成后,您还可以对应用进行日志管理、监控管理、应用事件查看和变更记录查看等聚焦应用运行状态的操作,具体操作方式请参见如下文档。 日志管理 监控管理 应用事件查看 变更记录查看 使用 Webshell 诊断应用

    2020-03-27 12:50:20
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Dubbo开源现状与2.7规划 立即下载
Dubbo分布式服务治理实战 立即下载
《Dubbo 3.0 前瞻》 立即下载