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和…

P5091-[模板]欧拉定理

正题 题目链接:https://www.luogu.org/problem/P5091 题目大意 求abmod&ThinSpace;&ThinSpace;ma^b\mod mabmodm 欧拉定理及扩展 欧拉定理: 对于(a,m)1(a,m)1(a,m)1那么有aφ(m)≡1(modm)a^{\varphi(m)}\equiv 1(mod\ m)aφ(m)≡1(mod m) 扩展欧拉定理 ab≡{ab%φ…

Dubbo(九)之注解配置

转载自 Dubbo注解配置 以注解配置的方式来配置你的 Dubbo 应用 提示 需要 2.6.3 及以上版本支持。 点此查看 完整示例 服务提供方 Service注解暴露服务 Service public class AnnotationServiceImpl implements AnnotationService {Overridepublic String sayHello(Stri…

P5431-[模板]乘法逆元2【递推】

正题 题目链接:https://www.luogu.org/problem/P5431 题目大意 一个长度为nnn的序列aaa。 求(∑i1nkiai)%p(\sum_{i1}^n \frac{k^i}{a_i})\% p(i1∑n​ai​ki​)%p 解题思路 定义si∏i1iais_i\prod_{i1}^ia_isi​i1∏i​ai​ 1si−11si∗ai\frac{1}{s_{i-1}}\frac{1}{s_{i}…

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…

POJ1006-Biorhythms【中国剩余定理】

正题 题目链接:http://poj.org/problem?id1006 题目大意 若干个p,e,i,dp,e,i,dp,e,i,d。已经知道 {(dx)≡p(mod23)(dx)≡e(mod28)(dx)≡i(mod33)\left\{\begin{matrix} (dx)\equiv p(mod\ 23) \\ (dx)\equiv e(mod\ 28) \\ (dx)\equiv i(mod\ 33) \end{matrix}\right.⎩⎨⎧…

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…

P4777-[模板]扩展中国剩余定理(EXCRT)

正题 题目链接:https://www.luogu.org/problem/P4777 题目大意 求方程 {x≡a1(modb1)x≡a2(modb2)...x≡an(modbn)\begin{cases} x \equiv a_1\ ({\rm mod}\ b_1) \\ x\equiv a_2\ ({\rm mod}\ b_2) \\ ... \\ x \equiv a_n\ ({\rm mod}\ b_n)\end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧​…

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的…

nacos(十三)之naocs 1.4.1单机和集群部署配置

一、下载安装nacos Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos&#xff0c;还需要为此配置 Maven环境&#xff0c;请确保是在以下版本环境中安装使用: 64 bit OS&#xff0c;支持 Linux/Unix/Mac/Windows&#xff0c;推荐选用 Linux/Unix/Mac。64 bit J…

P3807-[模板]卢卡斯定理

正题 题目链接:https://www.luogu.org/problem/P3807 题目大意 求Cnmm%pC_{nm}^m\% pCnmm​%p LucasLucasLucas定理 Cnm%pC⌊np⌋⌊mp⌋∗Cn%pm%pC_{n}^m\% pC_{\lfloor \frac{n}{p}\rfloor}^{\lfloor \frac{m}{p}\rfloor}*C_{n\%p}^{m\%p}Cnm​%pC⌊pn​⌋⌊pm​⌋​∗Cn%pm…

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

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

SpringBoot @Async加在实现接口类的非接口方法上获取Bean异常

一、场景复现 报错日志 *************************** APPLICATION FAILED TO START ***************************Description:A component required a bean of type com.mk.service.TestService that could not be found.Action:Consider defining a bean of type com.mk.ser…