Dubbo(十)之配置加载流程

转载自  Dubbo配置加载流程

Dubbo 中的配置加载流程介绍

此篇文档主要讲在应用启动阶段,Dubbo框架如何将所需要的配置采集起来(包括应用配置、注册中心配置、服务配置等),以完成服务的暴露和引用流程。

根据驱动方式的不同(比如Spring或裸API编程)配置形式上肯定会有所差异,具体请参考XML配置、Annotation配置、API配置三篇文档。除了外围驱动方式上的差异,Dubbo的配置读取总体上遵循了以下几个原则:

  1. Dubbo 支持了多层级的配置,并按预定优先级自动实现配置间的覆盖,最终所有配置汇总到数据总线URL后驱动后续的服务暴露、引用等流程。
  2. ApplicationConfig、ServiceConfig、ReferenceConfig 可以被理解成配置来源的一种,是直接面向用户编程的配置采集方式。
  3. 配置格式以 Properties 为主,在配置内容上遵循约定的 path-based 的命名规范

配置来源

首先,从Dubbo支持的配置来源说起,默认有四种配置来源:

  • JVM System Properties,-D 参数
  • Externalized Configuration,外部化配置
  • ServiceConfig、ReferenceConfig 等编程接口采集的配置
  • 本地配置文件 dubbo.properties

覆盖关系

下图展示了配置覆盖关系的优先级,从上到下优先级依次降低:

 

点此查看外部化配置详情

配置格式

目前Dubbo支持的所有配置都是.properties格式的,包括-DExternalized Configuration等,.properties中的所有配置项遵循一种path-based的配置格式:

# 应用级别
dubbo.{config-type}[.{config-id}].{config-item}={config-item-value}
# 服务级别
dubbo.service.{interface-name}[.{method-name}].{config-item}={config-item-value}
dubbo.reference.{interface-name}[.{method-name}].{config-item}={config-item-value}
# 多配置项
dubbo.{config-type}s.{config-id}.{config-item}={config-item-value}

应用级别

dubbo.application.name=demo-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=-1

服务级别

dubbo.service.org.apache.dubbo.samples.api.DemoService.timeout=5000
dubbo.reference.org.apache.dubbo.samples.api.DemoService.timeout=6000
dubbo.reference.org.apache.dubbo.samples.api.DemoService.sayHello.timeout=7000

多配置项

dubbo.registries.unit1.address=zookeeper://127.0.0.1:2181
dubbo.registries.unit2.address=zookeeper://127.0.0.1:2182dubbo.protocols.dubbo.name=dubbo
dubbo.protocols.dubbo.port=20880
dubbo.protocols.hessian.name=hessian
dubbo.protocols.hessian.port=8089

扩展配置

dubbo.application.parameters.item1=value1
dubbo.application.parameters.item2=value2
dubbo.registry.parameters.item3=value3
dubbo.reference.org.apache.dubbo.samples.api.DemoService.parameters.item4=value4

几种编程配置方式

接下来,我们看一下选择不同的开发方式时,对应到 ServiceConfig、ReferenceConfig 等编程接口采集的配置的变化。

Spring XML

参见示例

  <!-- dubbo-provier.xml --><dubbo:application name="demo-provider"/><dubbo:config-center address="zookeeper://127.0.0.1:2181"/><dubbo:registry address="zookeeper://127.0.0.1:2181" simplified="true"/><dubbo:metadata-report address="redis://127.0.0.1:6379"/><dubbo:protocol name="dubbo" port="20880"/><bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/><dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>

Spring Annotation

参见示例

  // AnnotationService服务实现@Servicepublic class AnnotationServiceImpl implements AnnotationService {@Overridepublic String sayHello(String name) {System.out.println("async provider received: " + name);return "annotation: hello, " + name;}}
  ## dubbo.propertiesdubbo.application.name=annotation-providerdubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880

Spring Boot

参见示例

  ## application.properties# Spring boot applicationspring.application.name=dubbo-externalized-configuration-provider-sample# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Servicedubbo.scan.base-packages=com.alibaba.boot.dubbo.demo.provider.service# Dubbo Application## The default value of dubbo.application.name is ${spring.application.name}## dubbo.application.name=${spring.application.name}# Dubbo Protocoldubbo.protocol.name=dubbodubbo.protocol.port=12345## Dubbo Registrydubbo.registry.address=N/A## DemoService versiondemo.service.version=1.0.0

API

参考示例

public static void main(String[] args) throws IOException {ServiceConfig<GreetingsService> service = new ServiceConfig<>();service.setApplication(new ApplicationConfig("first-dubbo-provider"));service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));service.setInterface(GreetingsService.class);service.setRef(new GreetingsServiceImpl());service.export();System.out.println("first-dubbo-provider is running.");System.in.read();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 文档数据库 RavenDB 4.0 发布

RavenDB 还有一个新的版本&#xff0c;RavenDB 4.0.0&#xff0c;一个ACID文档数据库&#xff0c;为数据操作中的高性能业务提供完全事务性的开源NoSQL解决方案。新版本更新了许多关键功能。平台Windows x64Windows x86Ubuntu 16.04 x64树莓派Docker&#xff08;Ubuntu 16.04和…

dotnetcore+vue+elementUI 前后端分离架 二(后端篇)

前言最近几年前后端分离架构大行其道&#xff0c;而且各种框架也是层出不穷。本文通过dotnetcore vue 来介绍 前后端分离架构实战。涉及的技术栈服务端技术mysql本项目使用mysql 作为持久化层本项目采用了 mysql 的示例 employees 数据库, 需要的朋友可以自行下载 。http://www…

SpringCloud Gateway配置自定义路由404坑

一、场景复现 微服务自定义路由&#xff0c;返回404页面。 ①如图&#xff1a; &#xff08;1&#xff09;springcloud-gateway的路由设置 Configuration public class RouteConfig {Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return buil…

Actor-ES框架:Ray-Handler之ToReadHandler编写

如图右上角所示&#xff0c;Ray中有两类Handler&#xff08;SubHandler和PartSubHandler&#xff09;,在使用中&#xff0c;SubHandler派生Actor的CoreHandler&#xff0c;PartSubHandler派生SQLToReadHandler&#xff0c;SQLToReadHandler派生Actor的ToReadHandler&#xff0c…

SpringCloud Zuul(十)之配置路由prefix坑

一、场景复现 配置prefixapi访问/api/micro-service/test接口404 &#xff08;1&#xff09;zuul配置 zuul:strip-prefix: true #转发路径截断匹配前缀prefix: "api"add-proxy-headers: falseset-content-length: truesemaphore:max-semaphores: 600 &#xff08;…

在Firefox 58中,WebAssembly组件性能提升了10倍

Mozilla在Firefox 58中为WebAssembly&#xff08;WASM&#xff09;组件推出了一套双层编译系统&#xff0c;号称解析和编译WASM代码的速度达到30-60MB/s&#xff0c;足够在有线网络中实现实时编译。基准测试表明&#xff0c;新版的性能比旧版提高了10倍&#xff0c;比Chrome快1…

SpringCloud Zuul(九)之路由自动刷新原理

一、现象 发布新服务&#xff0c;然后在数据库配置了路由&#xff0c;使用服务路径访问404。然后重新发布新的服务&#xff0c;就可以继续访问得到 &#xff08;1&#xff09;配置了路由第一次访问 &#xff08;2&#xff09;重新发布后访问 二、分析 &#xff08;1&#xf…

dotnetcore+vue+elementUI 前后端分离 三(前端篇)

说明&#xff1a;本项目使用了 mysql employees数据库&#xff0c;使用了vue axois element UI 2.0 ,演示了 单页程序 架构 ,vue router 的使用&#xff0c;axois 使用&#xff0c;以及 element UI 控件的使用。通过这几种技术的组合&#xff0c;实现了对 employee 的增&…

SpringCloud Greenwich(一)注册中心之nacos、Zuul和 gateway网关配置

本项目是搭建基于nacos注册中心的springcloud&#xff0c;使用zuul网关和gateway网关。 一、框架搭建 &#xff08;1&#xff09;项目结构 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 &#xff08;2&#xff09;环境 nacos 1.4.1…

欢乐ssl暑假赛【2019.8.6】

前言 莫得前言 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级&#xff0c;只放前10 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCCDDDEEE111(J−3)WYC(J-3)WYC(J−3)WYC500500500100100100100100100100100100100100100100100100222(H−1)QYH(H-1)QYH(H…

Actor-ES框架:Ray-Handler-消息订阅器编写

消息订阅器&#xff1a;Ray是基于Event Sourcing设计的ES/Actor框架&#xff0c;消息发布后需要订阅处理&#xff0c;订阅器主要有以下两类&#xff1a;CoreHandler消息订阅器RabbitSubSubHandlerToReadHandler消息订阅器RabbitSubSQLToReadHandler&#xff08;ToReadHandler的…

Actor-ES框架:Actor编写-ESGrain与ESRepGrain

ESGrain生命周期Ray中ESGrain继承自Grain扩展了Grain的生命周期。Grain的生命周期参加文档附录&#xff1a;1-Grain生命周期-译注.mdESGrain重写了Grain的OnActivateAsync方法。ESGrain的初始化过程如下&#xff1a;初始化ESGrain中的State调用ReadSnapshotAsync()读快照。如果…

DotNetAnywhere:可供选择的 .NET 运行时

我最近在收听一个名为DotNetRock 的优质播客&#xff0c;其中有以Knockout.js而闻名的Steven Sanderson 正在讨论 " WebAssembly And Blazor "。也许你还没听过&#xff0c;Blazor 正试图凭借WebAssembly的魔力将 .NET 带入到浏览器中。如果您想了解更多信息&#xf…

SpringCloud Greenwich(二)注册中心之consul、Zuul和 gateway网关配置

本项目是搭建基于consul注册中心的springcloud&#xff0c;使用zuul网关和gateway网关 一、框架搭建 &#xff08;1&#xff09;项目结构 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 &#xff08;2&#xff09;环境 consul 1.9.0…

Actor-ES框架:消息发布器与消息存储器

消息发布器&#xff1a;Ray是基于Event Sourcing设计的ES/Actor框架&#xff0c;ESGrain状态&#xff08;State&#xff09;的修改、ESGrain之间的通信默认使用RabbitMQ通信。消息的发布器主要是RabbitPubESGrain。RabbitPub特性RabbitPub特性是RabbitMQ消息发布器。RabbitSub特…

consul的安装搭建

一、下载consul consul官网下载地址&#xff1a;https://www.consul.io/downloads 旧版本下载 consul 1.9.3直接下载地址&#xff1a; consul_1.9.3_windows_amd64.zip consul_1.9.3_linux_amd64.zip 二、安装 将consul_1.9.3_xxx.zip解压的xxx/consul目录 &#xff08;1&…

使用xUnit为.net core程序进行单元测试

一. 导读为什么要编写自动化测试程序&#xff08;Automated Tests&#xff09;&#xff1f;可以频繁的进行测试可以在任何时间进行测试&#xff0c;也可以按计划定时进行&#xff0c;例如&#xff1a;可以在半夜进行自动测试。肯定比人工测试要快。可以更快速的发现错误。基本上…

jzoj6276-[Noip提高组模拟1]树【线段树,扫描线,倍增】

正题 题目大意 一棵树&#xff0c;若干个点对&#xff0c;求不包括任何一个点对的路径数量。 解题思路 我们考虑将不合法的方案在坐标系上表示。 我们先只考虑一个点对(x,y)(x,y)(x,y)&#xff0c;若xxx和yyy没有祖先关系&#xff0c;则不合法的路径一个点在xxx的子树中&…

SpringCloud Greenwich(三)注册中心之zookeeper、Zuul和 gateway网关配置

本项目是搭建基于zookeeper注册中心的springcloud&#xff0c;使用zuul网关和gateway网关 一、框架搭建 &#xff08;1&#xff09;项目结构 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 &#xff08;2&#xff09;环境 zookeeper…

Metrics, tracing 和 logging 的关系

译者注Peter Bourgon原作&#xff1a; Metrics, tracing, and logging译者&#xff1a;吴晟原作发表时间&#xff1a; 2017年2月21日这是在OpenTracing和分布式追踪领域内广受欢迎的一篇博客文章。在构建监控系统时&#xff0c;大家往往在这几个名词和方式之间纠结。 通过这篇文…