dubbo 配置文件详解

1. 概述

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。主要核心部件
Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

dubbo架构图如下所示:

节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo的一些属性:

dubbo:service/ 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
eg、<dubbo:service ref=“demoService” interface=“com.unj.dubbotest.provider.DemoService” />

dubbo:reference/ 引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
eg、<dubbo:reference id=“demoService” interface=“com.unj.dubbotest.provider.DemoService” />

dubbo:protocol/ 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
eg、<dubbo:protocol name=“dubbo” port=“20880” />

dubbo:application/ 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
eg、<dubbo:application name=“xixi_provider” />
<dubbo:application name=“hehe_consumer” />

dubbo:module/ 模块配置,用于配置当前模块信息,可选。
dubbo:registry/ 注册中心配置,用于配置连接注册中心相关信息。
eg、<dubbo:registry address=“zookeeper://192.168.2.249:2181” />

dubbo:monitor/ 监控中心配置,用于配置连接监控中心相关信息,可选。
dubbo:provider/ 提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选。
dubbo:consumer/ 消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选。
dubbo:method/ 方法配置,用于ServiceConfig和ReferenceConfig指定方法级的配置信息。
dubbo:argument/ 用于指定方法参数配置。

注意:

服务端客户端的区分

服务端:dubbo:service

<dubbo:service protocol=“dubbo” interface=“com.chainfin.loan.service.LonApplicationService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}”
timeout=“${dubbo.protocol.timeout}” ref=“loanAppService” retries=“0”/>

客户端:dubbo:reference

<dubbo:reference id=“loanAppDubboService” interface=“com.chainfin.loan.service.LonApplicationService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

流程:服务端提供接口供客户端调用。理论上是服务端提供的接口外人是不知道的,也不知道项目的真实架构流程。

一般分为三步:1.服务端提供接口,一般部署在自己的内网。2、对外网暴漏在外的客户端接口,供别的项目调用接口。中间涉及到了黑白名单。不细说(我也没学会呢。)

服务端代码:

1、config.properties配置文件(包含数据库的,zk的,redis的等等一些配置信息)。

2、applicationContext.xml spring配置文件,加载了配置文件。如

<context:property-placeholder location=“classpath:config.properties” />

3、applicationContext_dubbo_main_server.xml Dubbo服务端提供的配置文件以及接口:

<xml version=“1.0” encoding=“UTF-8”>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context”
xmlns:dubbo=“http://code.alibabatech.com/schema/dubbo”
xsi:schemaLocation=“http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd”>
<dubbo:application name=“dubbo_main_server” />

<dubbo:registry protocol=“zookeeper” address=“${dubbo.registry.address}” />

<dubbo:protocol name=“dubbo” port=“ d u b b o _ s e r v e r _ p o r t " h o s t " ˉ {dubbo\_server\_port}" host\=" dubbo_server_port"host"ˉ{dubbo_server_address}” />
<dubbo:protocol name=“hessian” port=“20887” host=“ d u b b o _ s e r v e r _ a d d r e s s " t h r e a d p o o l " ˉ {dubbo\_server\_address}" threadpool\=" dubbo_server_address"threadpool"ˉ{dubbo_server_threadpool_type}” threads=“${dubbo_server_threadpool_threads}”/>
<dubbo:provider threads=“2500” threadpool=“cached”/>

<bean id=“loanAppService”
class=“com.chainfin.loan.modules.application.service.LonApplicationServiceImpl” />

<bean id=“messagePushService”
class=“com.chainfin.loan.modules.msgPush.MessagePushServiceImpl” />

<dubbo:service protocol\="dubbo" interface\="com.chainfin.loan.service.LonApplicationService"
  group\="${dubbo.protocol.group}" version\="${dubbo.protocol.version}"
  timeout\="${dubbo.protocol.timeout}" ref\="loanAppService" retries\="0"/>
<dubbo:service protocol\="dubbo" interface\="com.chainfin.loan.service.MessagePushService"
  group\="${dubbo.protocol.group}" version\="${dubbo.protocol.version}"
  timeout\="${dubbo.protocol.timeout}" ref\="messagePushService" retries\="0"/>

客户端代码:

1、config.properties,一些属性的配置文件信息

2、spring-context.xml spring的配置文件信息,里面加载了config.properties配置文件。

<context:property-placeholder ignore-unresolvable=“true” location=“classpath:config.properties” />

3、spring-context-dubbo-client.xml Dubbo的客户端配置文件:

<xml version=“1.0” encoding=“UTF-8”>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:context=“http://www.springframework.org/schema/context”
xmlns:dubbo=“http://code.alibabatech.com/schema/dubbo”
xsi:schemaLocation=“http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd”>

<dubbo:application name=“loanDubbo-client-118” />

<dubbo:registry id=“userzk” protocol=“zookeeper” address=“${dubbo.registry.address}” check=“false”/>

<dubbo:reference id=“loanAppDubboService” interface=“com.chainfin.loan.service.LonApplicationService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“smsSenderService” interface=“com.chainfin.loan.service.SmsSenderService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“userContactService” interface=“com.chainfin.loan.service.UserContactService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“userCommissionService” interface=“com.chainfin.loan.service.UserCommissionService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“mgtUserDubboService” interface=“com.chainfin.loan.service.MgtUserService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“commissionService” interface=“com.chainfin.loan.service.CommissionService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“phoneCheckService” interface=“com.chainfin.loan.service.PhoneCheckService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“commissionPromotionService” interface=“com.chainfin.loan.service.CommissionPromotionService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“userTreeService” interface=“com.chainfin.loan.service.MgtUserTreeService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

<dubbo:reference id=“shortUrlService” interface=“com.chainfin.loan.service.ShortUrlService”
group=“ d u b b o . p r o t o c o l . g r o u p " v e r s i o n " ˉ {dubbo.protocol.group}" version\=" dubbo.protocol.group"version"ˉ{dubbo.protocol.version}” timeout=“${dubbo.protocol.timeout}” registry=“userzk” check=“false”/>

4、注意:我接口中虽然提供了消息推送的接口。但是dubbo没有消息推送的功能。都是自己写的接口,然后根据业务来实现的。你可以接口消息中间件之类的实现。

5、黑白名单可以参考文档。比如:http://itindex.net/detail/56167-dubbo-%E6%8E%A5%E5%8F%A3-dubbo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你的dubbo配置文件yml不生效,可能存在以下几种情况: 1. 配置文件名称不正确:dubbo默认会读取名为dubbo.properties或dubbo.xml的配置文件,如果你使用的是yml格式的配置文件,则需要在启动类上添加@PropertySource注解指定配置文件的名称和路径,例如: ```java @SpringBootApplication @PropertySource("classpath:dubbo.yml") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2. 配置文件格式错误:dubbo.yml格式有严格的语法规范,如果格式不正确,dubbo就无法读取配置信息。可以使用在线工具进行格式检查,例如:http://www.yamllint.com/ 3. 配置文件位置错误:yml文件需要放在resources目录下,且需要按照dubbo配置规则进行配置。可以参考官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/yaml/configuration.html 4. 项目中存在多个配置文件:如果你的项目中存在多个配置文件dubbo会按照默认规则读取第一个配置文件,如果第一个配置文件中没有dubbo相关的配置信息,就无法生效。可以通过在启动类上添加@ImportResource注解指定要读取的配置文件,例如: ```java @SpringBootApplication @ImportResource("classpath:dubbo.xml") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 以上是一些可能导致dubbo配置文件yml不生效的原因,你可以根据实际情况进行排查和解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值