<small id='BYhe50rxiI'></small> <noframes id='uU20jtQBEK'>

  • <tfoot id='VbRrwsv'></tfoot>

      <legend id='7GMfZ'><style id='l7vErKH3'><dir id='1vm4n9'><q id='gtXcAZnh'></q></dir></style></legend>
      <i id='MzQB4xe'><tr id='JKtjkEO'><dt id='4ZKdHvxc2'><q id='JWsn'><span id='WCg8jli'><b id='Hs6KCAXcd'><form id='JdVaAm'><ins id='laI0R4VHs'></ins><ul id='6aRWoN5fbY'></ul><sub id='kRLA'></sub></form><legend id='xLnFM9'></legend><bdo id='g8RJQNhZnd'><pre id='9fCMV'><center id='KFQYIA'></center></pre></bdo></b><th id='ReJ2yi'></th></span></q></dt></tr></i><div id='Wr0EhV'><tfoot id='VPBvA'></tfoot><dl id='5AKE'><fieldset id='N0WTl'></fieldset></dl></div>

          <bdo id='gCDmNJ41P'></bdo><ul id='v1pmRZoKkg'></ul>

          1. <li id='vZbA4fEodO'></li>
            登陆

            壹号平台-Dubbo 与 Spring Cloud 完美结合

            admin 2019-11-06 295人围观 ,发现0个评论

            假如我的文章对您有协助,请重视支撑下作者的大众号:极客挖掘机,谢谢:)

            1. 概述

            或许说起来Dubbo,很多人都不生疏,这毕竟是一款从2012年就开端开源的Java RPC结构,中心由于各式各样的原因中止更新4年半的时刻,中心只发过一个小版别修了一个小bug,乃至咱们都认为这个项目现已死掉了,居然又在2017年9月份康复了更新,不可谓不奇特。

            网络上很多人都拿Dubbo和Spring Cloud做比照,或许在咱们的心目中,这两个结构是能够画上等号的吧,后来在网络上有一个十分盛行的表格,比较详细的比照了 Spring Cloud 和 Dubbo ,表格如下:

            以上列举了一些中心部件,当然这儿需求声明一点,Dubbo关于上表中总结为“无”的组件不代表不能完成,而仅仅Dubbo结构本身不供给,需求别的整合以完成对应的功用,这样看起来的确Dubbo更像是Spring Cloud的一个子集。

            Dubbo 在国内拥有着巨大的用户群,咱们期望在运用 Dubbo 的一起享用 Spring Cloud 的生态,呈现各式各样的整合计划,可是由于服务中心的不同,各种整合计划并不是那么天然,直到 Spring Cloud Alibaba 这个项目呈现,由官方供给了 Nacos 服务注册中心后,才将这个问题完美的处理。而且供给了 Dubbo 和 Spring Cloud 整合的计划,命名为: Dubbo Spring Cloud 。

            1.2 Dubbo Spring Cloud 概述

            Dubbo Spring Cloud 构建在原生的 Spring Cloud 之上,其服务办理方面的才能可认为是 Spring Cloud Plus, 不只彻底掩盖 Spring Cloud 原生特性,而且供给更为安稳和成熟的完成,特性比对如下表所示:

            以上比照表格摘自Dubbo Spring Cloud官方文档。

            而且Dubbo Spring Cloud 依据 Dubbo Spring Boot 2.7.1 和 Spring Cloud 2.x 开发,不管开发人员是 Dubbo 用户仍是 Spring Cloud 用户, 都能轻松地驾御,并以挨近“零”本钱的价值使运用向上搬迁。Dubbo Spring Cloud 致力于简化云原生开发本钱,以达到进步研制效能以及进步运用功用等意图。

            1.3 Dubbo Spring Cloud 首要特性

            • 面向接口署理的高功用RPC调用:供给高功用的依据署理的长途调用才能,服务以接口为粒度,屏蔽了长途调用底层细节。
            • 智能负载均衡:内置多种负载均衡战略,智能感知下流节点健康状况,明显削减调用推迟,进步体系吞吐量。
            • 服务主动注册与发现:支撑多种注册中心服务,服务实例上下线实时感知。
            • 高度可扩展才能:遵从微内核+插件的规划准则,一切中心才能如Protocol、Transport、Serialization被规划为扩展点,相等对待内置完成和第三方完成。
            • 运行期流量调度:壹号平台-Dubbo 与 Spring Cloud 完美结合内置条件、脚本等路由战略,经过装备不同的路由规矩,轻松完成灰度发布,同机房优先等功用。
            • 可视化的服务办理与运维:供给丰厚服务办理、运维东西:随时查询服务元数据、服务健康状况及调用计算,实时下发路由战略、调整装备参数。

            1.4 Spring Cloud 为什么需求RPC

            在Spring Cloud构建的微服务体系中,大多数的开发者运用都是官方供给的Feign组件来进行内部服务通讯,这种声明式的HTTP客户端运用起来十分的简练、便利、高雅,可是有一点,在运用Feign消费服务的时分,相比较Dubbo这种RPC结构而言,功用堪忧。

            虽然在微服务架构中,会讲依照事务区分的微服务独立布置,而且运行在各自的进程中。微服务之间的通讯愈加倾向于运用HTTP这种简答的通讯机制,大多数状况都会运用REST API。这种通讯方法十分的简练高效,而且和开发渠道、言语无关,可是通常状况下,HTTP并不会敞开KeepAlive功用,即当时衔接为短衔接,短衔接的缺陷是每次恳求都需求树立TCP衔接,这使得其功率变的适当低下。

            对外部供给REST API服务是一件十分好的工作,可是假如内部调用也是运用HTTP调用方法,就会显得显得功用低下,Spring Cloud默许运用的Feign组件进行内部服务调用便是运用的HTTP协议进行调用,这时,咱们假如内部服务运用RPC调用,对外运用REST API,将会是一个十分不错的挑选,恰巧,Dubbo Spring Cloud给了咱们这种挑选的完成方法。

            2. 实战

            本小结将会以一个简略的入门事例,介绍一下在运用Nacos作为服务中心,运用Dubbo来完成服务供给方和服务消费方的事例。

            Nacos的装置、布置装备和运用现已在前面的章节介绍过了,这儿不再赘述,假如还有不清楚的读者,请参阅前面的Nacos系列文章:

            《Spring Cloud Aliba母妖剂ba | Nacos服务中心初探》

            《Spring Cloud Alibaba | Nacos服务注册与发现》

            《Spring Cloud Alibaba | Nacos集群布置》

            《Spring Cloud Alibaba | Nacos装备办理》

            2.1 创立父工程 dubbo-spring-cloud-demo

            父工程依靠pom.xml如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/pom.xml





            org.springframework.cloud
            s壹号平台-Dubbo 与 Spring Cloud 完美结合pring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import


            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            ${spring-cloud-alibaba.version}
            pom
            import





            org.springframework.boot
            spring-boot-starter-actuator


            org.springframework.boot
            spring-boot-starter-web



            com.alibaba.cloud
            spring-cloud-starter-dubbo



            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery


            org.projectlombok
            lombok
            true


            org.springframework.boot
            spring-boot-starter-test
            test


            留意:

            1. 有必要包括spring-boot-starter-actuator包,否则发动会报错。
            2. spring-cloud-starter-dubbo包需求留意groupId,依据详细运用的spring cloud alibaba版别依靠来确认。
            • 假如运用孵化版别,运用的groupId为:org.springframework.cloud
            • 假如运用结业版别,运用的groupId为:com.alibaba.cloud
            1. 以上引证未指定版别,需显现的声明

            2.2 创立子工程 dubbo_api

            API模块,寄存Dubbo服务接口和模型界说,非必要,这儿创立仅为更好的代码重用以及接口、模型标准操控办理。

            界说笼统接口HelloService.java:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_api/src/main/java/com/springcloud/dubbo壹号平台-Dubbo 与 Spring Cloud 完美结合_api/service/HelloService.java


            public interface HelloService {
            String hello(String name);
            }

            2.3 创立子工程 dubbo_provider ,Dubbo服务供给方

            工程依靠pom.xml如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/pom.xml




            com.springcloud.book
            ch13_1_dubbo_api
            ${project.version}

            此处引进公共API模块。

            完成Dubbo接口,HelloServiceI.java如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/src/main/java/com/springcloud/dubbo_provider/service/HelloServiceI.java


            @Service
            public class HelloServiceI implements HelloService {
            @Override
            public String hello(String name) {
            return "Hello " + name;
            }
            }

            留意:这儿的@Service注解并不是来自Spring的org.springframework.stereotype.Service,而是Dubbo的org.apache.dubbo.config.annotation.Service,千万不要引证过错。这儿的@Service注解仅声明该Java服务(本地)完成为Dubbo服务。

            装备文件 application.yml 需求将Java服务(本地)装备为 Dubbo 服务(长途)如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_provider/src/main/resources/application.yml


            server:
            port: 8000
            dubbo:
            scan:
            base-packages: com.springcloud.book.ch13_1_dubbo_provider.service
            protocol:
            name: dubbo
            port: -1
            registry:
            address: spring-cloud://192.168.44.129
            spring:
            application:
            name: dubbo-spring-cloud-provider
            cloud:
            nacos:
            discovery:
            server-addr: 192.168.44.129:8848
            main:
            allow-bean-definition-overriding: true

            留意:在露出Dubbo服务方面,引荐运用外部化装备的方法,即指定Java服务完成类的扫描基准包。

            Dubbo Spring Cloud 承继了 Dubbo Spring Boot 的外部化装备特性,也能够经过标示 @DubboComponentScan 来完成基准包扫描。

            • dubbo.scan.base-packages:指定 Dubbo 服务完成类的扫描基准包
            • dubbo.protocol:Dubbo服务露出的协议装备,其中子特点name为协议称号,port为协议端口(-1 表明自增端口,从 20880 开端)
            • dubbo.registry:Dubbo 服务注册中心装备,其中子特点address 的值 "spring-cloud://192.168.44.129",阐明挂载到 Spring Cloud 注册中心
            • spring.application.name:Spring 运用称号,用于 Spring Cloud 服务注册和发现。该值在 Dubbo Spring Cloud 加持下被视作dubbo.application.name,因而,无需再显现地装备dubbo.application.name。
            • spring.main.allow-bean-definition-overriding:在 Spring Boot 2.1 以及更高的版别添加该设定,由于 Spring Boot 默许调整了 Bean 界说掩盖行为。
            • spring.cloud.nacos.discovery:Nacos 服务发现与注册装备,其中子特点 server-addr 指定 Nacos 服务器主机和端口。

            创立运用主类Ch131DubboProviderApplication.java:

            代码清单:Ali壹号平台-Dubbo 与 Spring Cloud 完美结合baba/dubbo-spring-cloud-demo/dubbo_provider/src/main/java/com/springcloud/dubbo_provider/DubboProviderApplication.java


            @SpringBootApplication
            @EnableDiscoveryClient
            public class DubboProviderApplication {
            public static void main(String[] args) {
            SpringApplication.run(DubboProviderApplication.class, args);
            }
            }

            2.4 创立子工程 dubbo_consumer ,服务调用方:

            工程依靠pom.xml如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/pom.xml




            com.springcloud.book
            ch13_1_dubbo_api
            ${project.version}

            工程装备application.yml如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/src/main/resources/application.yml


            server:
            port: 8080
            dubbo:
            protocol:
            name: dubbo
            port: -1
            registry:
            address: spring-cloud://192.168.44.129
            cloud:
            subscribed-services: dubbo-spring-cloud-provider
            spring:
            application:
            name: dubbo-spring-cloud-consumer
            cloud:
            nacos:
            discovery:
            server-addr: 192.168.44.129:8848
            main:
            allow-bean-definition-overriding: true
            • dubbo.cloud.subscribed-services:表明要订阅服务的服务名,能够装备'*',代表订阅一切服务,不引荐运用。若需订阅多运用,运用 "," 切割。

            测验接口HelloController.java如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/src/main/java/com/springcloud/dubbo_consumer/controller/HelloController.java


            @RestController
            public class HelloController {
            @Reference
            private HelloService helloService;
            @GetMapping("/hello")
            public String hello() {
            return helloService.hello("Dubbo!");
            }
            }

            留意:这儿的@Reference注解是org.apache.dubbo.config.annotation.Reference。

            发动主类Ch131DubboConsumerApplication.java如下:

            代码清单:Alibaba/dubbo-spring-cloud-demo/dubbo_consumer/src/main/java/com/springcloud/dubbo_consumer/DubboConsumerApplication.java


            @SpringBootApplication
            @EnableDiscoveryClient
            public class DubboConsumerApplication {
            public static void main(String[] args) {
            SpringApplication.run(DubboConsumerApplication.class, args);
            }
            }

            2.5 测验

            发动子工程 dubbo_provider 和子工程 dubbo_consumer ,发动完成后,咱们能够拜访Nacos操控台的服务列表上看到两个服务,如图:

            咱们翻开浏览器拜访:http://localhost:8080/hello ,能够看到页面正常显现Hello Dubbo!,测验成功,如图:

            3. 示例代码

            示例代码-Github:https://github.com/meteor1993/SpringCloudLearning/tree/master/Alibaba/dubbo-spring-cloud-demo

            示例代码-Gitee:https://gitee.com/inwsy/SpringCloudLearning/tree/master/Alibaba/dubbo-spring-cloud-demo

            4. 参阅

            Dubbo Spring Cloud 官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Dubbo-Spring-Cloud

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP