Dubbo怎么实现Spring Cloud服务治理


本篇内容介绍了“Dubbo怎么实现Spring Cloud服务治理 ”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!由于 Spring 官方宣布 Spring Cloud Edgware(下文简称为 “E” 版) 将在 2019 年 8 月 1 日后停止维护13,因此,目前 Dubbo Spring Cloud 发布版本并未对 “E” 版提供支持,仅为 “F” 版 和 “G” 版开发,同时也建议和鼓励 Spring Cloud 用户更新至 “F” 版 或 “G” 版。同时,Dubbo Spring Cloud 基于 Apache Dubbo Spring Boot 2.7.x 开发(最低 Java 版本为 1.8),提供完整的 Dubbo 注解驱动、外部化配置以及 Production-Ready 的特性,点击查看详情。以下表格将说明 Dubbo Spring Cloud 版本关系映射关系:Spring CloudSpring Cloud AlibabaSpring BootDubbo Spring BootFinchley0.2.2.RELEASE2.0.x2.7.1Greenwich2.2.1.RELEASE2.1.x2.7.1Edgware0.1.2.RELEASE1.5.x:x: Dubbo Spring Cloud 不支持该版本由于 Dubbo Spring Cloud 构建在原生的 Spring Cloud 之上,其服务治理方面的能力可认为是 Spring Cloud Plus,不仅完全覆盖 Spring Cloud 原生特性,而且提供更为稳定和成熟的实现,特性比对如下表所示:功能组件Spring CloudDubbo Spring Cloud分布式配置(Distributed configuration)Git、Zookeeper、Consul、JDBCSpring Cloud 分布式配置 + Dubbo 配置中心(Dubbo 2.7 开始支持配置中心,可自定义适配)服务注册与发现(Service registration and discovery)Eureka、Zookeeper、ConsulSpring Cloud 原生注册中心(Spring Cloud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 Nacos)+ Dubbo 原生注册中心负载均衡(Load balancing)Ribbon(随机、轮询等算法)Dubbo 内建实现(随机、轮询等算法 + 权重等特性)服务熔断(Circuit Breakers)Spring Cloud HystrixSpring Cloud Hystrix + Alibaba Sentinel等(Sentinel 已被 Spring Cloud 项目纳为 Circuit Breaker 的候选实现)服务调用(Service-to-service calls)Open Feign、RestTemplateSpring Cloud 服务调用 + Dubbo@Reference链路跟踪(Tracing)Spring Cloud Sleuth + ZipkinZipkin、opentracing 等Dubbo Spring Cloud 基于 Spring Cloud Commons 抽象实现 Dubbo 服务注册与发现,应用只需增添外部化配置属性 “dubbo.registry.address = spring-cloud://localhost”,就能轻松地桥接到所有原生 Spring Cloud 注册中心,包括: – Nacos – Eureka – Zookeeper – Consul注:Dubbo Spring Cloud 将在下个版本支持 Spring Cloud 注册中心与 Dubbo 注册中心并存,提供双注册机制,实现无缝迁移默认情况,Spring Cloud Open Feign 以及@LoadBalancedRestTemplate作为 Spring Cloud 的两种服务调用方式。Dubbo Spring Cloud 为其提供了第三种选择,即 Dubbo 服务将作为 Spring Cloud 服务调用的同等公民出现,应用可通过 Apache Dubbo 注解@Service@Reference暴露和引用 Dubbo 服务,实现服务间多种协议的通讯。同时,也可以利用 Dubbo 泛化接口轻松实现服务网关。Dubbo Spring Cloud 引入了全新的服务治理特性 – 服务自省(Service Introspection),其设计目的在于最大化减轻注册中心负载,去 Dubbo 注册元信息中心化。假设一个 Spring Cloud 应用引入 Dubbo Spring Boot Starter,并暴露 N 个 Dubbo 服务,以Dubbo Nacos 注册中心为例,当前应用将注册 N+1 个 Nacos 应用,除 Spring Cloud 应用本身之前,其余 N 个应用均来自于 Dubbo 服务,当 N 越大时,注册中心负载越重。因此,Dubbo Spring Cloud 应用对注册中心的负载相当于传统 Dubbo 的 N 分之一,在不增加基础设施投入的前提下,理论上,使其集群规模扩大 N 倍。当然,未来的 Dubbo 也将提供服务自省的能力。尽管 Dubbo Spring Cloud 完全地保留了原生 Spring Cloud 服务调用特性,不过 Dubbo 服务治理的能力是 Spring Cloud Open Feign 所不及的,如高性能、高可用以及负载均衡稳定性等方面。因此,建议开发人员将 Spring Cloud Open Feign 或者@LoadBalancedRestTemplate迁移为 Dubbo 服务。考虑到迁移过程并非一蹴而就,因此,Dubbo Spring Cloud 提供了方案,即@DubboTransported注解。该注解能够帮助服务消费端的 Spring Cloud Open Feign 接口以及@LoadBalancedRestTemplateBean 底层走 Dubbo 调用(可切换 Dubbo 支持的协议),而服务提供方则只需在原有@RestController类上追加 Dubbo@Servce注解(需要抽取接口)即可,换言之,在不调整 Feign 接口以及RestTemplateURL 的前提下,实现无缝迁移。如果迁移时间充分的话,建议使用 Dubbo 服务重构系统中的原 香港云主机生 Spring Cloud 服务的定义。开发 Dubbo Spring Cloud 应用的方法与传统 Dubbo 或 Spring Cloud 应用类似,按照以下步骤就能完整地实现Dubbo 服务提供方和消费方的应用,完整的示例代码请访问一下资源:Dubbo 服务提供方应用Dubbo 服务消费方应用Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口(interface)来声明,如EchoService接口:为了确保契约的一致性,推荐的做法是将 Dubbo 服务接口打包在第二方或者第三方的 artifact(jar)中,如以上接口就存放在 artifactspring-cloud-dubbo-sample-api之中。对于服务提供方而言,不仅通过依赖 artifact 的形式引入 Dubbo 服务接口,而且需要将其实现。对应的服务消费端,同样地需要依赖该 artifact,并以接口调用的方式执行远程方法。接下来进一步讨论怎样实现 Dubbo 服务提供方和消费方。首先,创建artifactId名为spring-cloud-dubbo-server-sample的 Maven 工程,并在其pom.xml文件中增添 Dubbo Spring Cloud 必要的依赖:以上依赖 artifact 说明如下:spring-cloud-dubbo-sample-api: 提供EchoService接口的 artifactspring-boot-actuator: Spring Boot Production-Ready artifact,间接引入spring-bootartifactspring-cloud-starter-dubbo: Dubbo Spring Cloud Starterartifact,间接引入dubbo-spring-boot-starter等 artifactspring-cloud-starter-alibaba-nacos-discovery: Nacos Spring Cloud 服务注册与发现artifact值得注意的是,以上 artifact 未指定版本(version),因此,还需显示地声明:注:以上完整的 Maven 依赖配置,请参考spring-cloud-dubbo-server-samplepom.xml文件完成以上步骤之后,下一步则是实现 Dubbo 服务。EchoService作为暴露的 Dubbo 服务接口,服务提供方spring-cloud-dubbo-server-sample需要将其实现:其中,@org.apache.dubbo.config.annotation.Service是 Dubbo 服务注解,仅声明该 Java 服务(本地)实现为 Dubbo 服务。 因此,下一步需要将其配置 Dubbo 服务(远程)。在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。注:Dubbo Spring Cloud 继承了 Dubbo Spring Boot 的外部化配置特性,也可以通过标注@DubboComponentScan来实现基准包扫描同时,Dubbo 远程服务需要暴露网络端口,并设定通讯协议,完整的 YAML 配置如下所示:以上 YAML 内容,上半部分为 Dubbo 的配置:dubbo.scan.base-packages: 指定 Dubbo 服务实现类的扫描基准包dubbo.protocol: Dubbo 服务暴露的协议配置,其中子属性name为协议名称,port为协议端口( -1 表示自增端口,从 20880 开始)dubbo.registry: Dubbo 服务注册中心配置,其中子属性address的值 “spring-cloud://localhost”,说明挂载到 Spring Cloud 注册中心下半部分则是 Spring Cloud 相关配置:spring.application.name: Spring 应用名称,用于 Spring Cloud 服务注册和发现。 > 该值在 Dubbo Spring Cloud 加持下被视作dubbo.application.name,因此,无需再显示地配置dubbo.application.namespring.cloud.nacos.discovery: Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口以上完整的 YAML 配置文件,请参考spring-cloud-dubbo-server-samplebootstrap.yaml文件完成以上步骤后,还需编写一个 Dubbo Spring Cloud 引导类。Dubbo Spring Cloud 引导类与普通 Spring Cloud 应用并无差别,如下所示:在引导DubboSpringCloudServerBootstrap之前,请提前启动 Nacos 服务器。 当DubboSpringCloudServerBootstrap启动后,将应用spring-cloud-dubbo-server-sample将出现在 Nacos 控制台界面。当 Dubbo 服务提供方启动后,下一步实现一个 Dubbo 服务消费方。由于 Java 服务就EchoService、服务提供方应用spring-cloud-dubbo-server-sample以及 Nacos 服务器均已准备完毕。Dubbo 服务消费方 只需初始化服务消费方 Maven 工程spring-cloud-dubbo-client-sample以及消费 Dubbo 服务。与服务提供方 Maven 工程类,需添加相关 Maven 依赖:与应用spring-cloud-dubbo-server-sample不同的是,当前应用依赖spring-boot-starter-web,表明它属于 Web Servlet 应用。注:以上完整的 Maven 依赖配置,请参考spring-cloud-dubbo-client-samplepom.xml文件Dubbo 服务消费方配置与服务提供方类似,当前应用spring-cloud-dubbo-client-sample属于纯服务消费方,因此,所需的外部化配置更精简:对比应用spring-cloud-dubbo-server-sample,除应用名称spring.application.name存在差异外,spring-cloud-dubbo-client-sample新增了属性dubbo.cloud.subscribed-services的设置,并且该值为服务提供方应用 “spring-cloud-dubbo-server-sample”。dubbo.cloud.subscribed-services: 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 “,” 分割。 不推荐使用默认值为 “*”,它将订阅所有应用。当应用使用属性dubbo.cloud.subscribed-services默认值时,日志中将会输出一行警告:> > Current application will subscribe all services(size:x) in registry, a lot of memory and CPU cycles may be used,> > thus it’s strongly recommend you using the externalized property ‘dubbo.cloud.subscribed-services’ to specify the services由于当前应用属于 Web 应用,它会默认地使用 8080 作为 Web 服务端口,如果需要自定义,可通过属性server.port调整。注:以上完整的 YAML 配置文件,请参考spring-cloud-dubbo-client-samplebootstrap.yaml文件为了减少实现步骤,以下引导类将 Dubbo 服务消费以及引导功能合二为一:不仅如此,DubboSpringCloudClientBootstrap也作为 REST Endpoint,通过暴露/echoWeb 服务,消费 DubboEchoService服务。因此, 可通过curl命令执行 HTTP GET 方法:HTTP 响应为:以上结果说明应用spring-cloud-dubbo-client-sample通过消费 Dubbo 服务,返回服务提供方spring-cloud-dubbo-server-sample运算后的内容。“Dubbo怎么实现Spring Cloud服务治理 ”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Python如何制作词云

本篇内容主要讲解“Python如何制作词云”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何制作词云”吧!效果如下:(词云–出现频率越多的词,字体越大 )1、安装可视化库3、安装 “结巴” 库, 这个…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 10/16 13:17
下一篇 10/16 13:17

相关推荐