dubbo 配置文件详解

2022-12-31 09:09:33

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="${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="${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协议在20886端口暴露服务 -->
   <dubbo:protocol name="dubbo" port="${dubbo_server_port}"
      host="${dubbo_server_address}" />
   <dubbo:protocol name="hessian" port="20887" host="${dubbo_server_address}" threadpool="${dubbo_server_threadpool_type}" threads="${dubbo_server_threadpool_threads}"/>  
   <dubbo:provider threads="2500" threadpool="cached"/>

   <!-- 订单信息bean -->
   <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"/>
      
</beans>

客户端代码:

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="${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="${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="${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="${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="${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="${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="${dubbo.protocol.group}" version="${dubbo.protocol.version}" timeout="${dubbo.protocol.timeout}" registry="userzk" check="false"/>
   <!-- 用户活动奖励Service -->
   <dubbo:reference id="commissionPromotionService" interface="com.chainfin.loan.service.CommissionPromotionService"
         group="${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="${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="${dubbo.protocol.group}" version="${dubbo.protocol.version}" timeout="${dubbo.protocol.timeout}"  registry="userzk" check="false"/>
   
   <!-- 操作日志 -->
   <!-- <dubbo:reference id="operateHistoryService" interface="com.chainfin.loan.service.OperateHistoryService"
         group="${dubbo.protocol.group}" version="${dubbo.protocol.version}" timeout="${dubbo.protocol.timeout}" registry="userzk" check="false"/> -->
</beans>

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

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

  • 作者:Rose逆水行舟
  • 原文链接:https://blog.csdn.net/liyintaoliuyun/article/details/80066269
    更新时间:2022-12-31 09:09:33