Dubbo探索(二)

spring配置解析

1、<dubbo:service/>

服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

<dubbo:service ref="userService" interface="com.patty.dubbo.api.service.UserService"/>interface用于指定接口名,ref指定服务引用对象,这两者必填,此外还有一些其他属性可供选择,比如:group: 服务分组,当一个接口有多个实现,可以用分组区分timeout: 远程服务调用超时时间(毫秒),默认1000msretries: 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0,默认值为2

2、<dubbo:reference/>

引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。

<dubbo:reference id="userService" interface="com.patty.dubbo.api.service.UserService"                 timeout="10000" retries="3" check="false"/>id: 服务所引用的bean id, 对应service中ref属性的值check:启动时检查提供者是否存在,为false表示关闭检查。   <dubbo:consumer check="false" /> 关闭所有服务的检查,没有提供者的时候check值为true报错,false忽略   <dubbo:registry check="false" /> 关闭注册中心启动时检查,注册订阅失败时check值为true报错, false忽略

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

<dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/>name: 协议名称port: 服务端口可选协议有1) dubbo:// Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

<dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

server: 协议的服务器端实现类型

client:协议的客户端实现类型

codec: 协议编码方式

  serialization: 协议序列化方式

  threadpool: 线程池类型,可选:fixed/cached

  threads: 服务线程池大小(固定大小),默认100

  accepts: 服务提供者最大可接受连接数

  缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。

    •   连接个数:单连接
    •   连接方式:长连接
    •   传输协议:TCP
    •   传输方式:NIO异步传输
    •   序列化:Hessian二进制序列化
    •   适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
    •   适用场景:常规远程服务方法调用

2) rmi://

3)hessian://

4) http://

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:表单序列化
  • 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
  • 适用场景:需同时给应用程序和浏览器JS使用的服务。

可选的server有jetty和servlet.

5) thrift://

6) memcached://

7)redis://

8) webservice://

4、<dubbo:application/> 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。

<dubbo:application name="${dubbo.application.name}"/>

name:当前应用名称,用于注册中心计算应用间依赖关系,服务方和消费方不必保持一样,该名称不是匹配条件

version:当前应用的版本

5、<dubbo:registry/> 注册中心配置,用于配置连接注册中心相关信息。

<dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/>protocol: 注同中心地址协议,支持dubbo, http, local三种协议,分别表示,dubbo地址,http地址,本地注册中心address:注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry>标签

6、其他的一些配置项

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

7、配置优先级

  • 上图中以timeout为例,显示了配置的查找顺序,其它retries, loadbalance, actives等类似。

    • 方法级优先,接口级次之,全局配置再次之。
    • 如果级别一样,则消费方优先,提供方次之。
  • 其中,服务提供方配置,通过URL经由注册中心传递给消费方。
  • 建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。
  • 理论上ReferenceConfig的非服务标识配置,在ConsumerConfig,ServiceConfig, ProviderConfig均可以缺省配置。

8、属性配置方式

1)dubbo.properties文件

如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个Spring容器想共享配置,可以使用dubbo.properties作为缺省配置

Dubbo将自动加载classpath根目录下的dubbo.properties,可以通过JVM启动参数:-Ddubbo.properties.file=xxx.properties 改变缺省配置位置

覆盖策略:

  • JVM启动-D参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
  • XML次之,如果在XML中有配置,则dubbo.properties中的相应配置项无效。
  • Properties最后,相当于缺省值,只有XML没有配置时,dubbo.properties的相应配置项才会生效,通常用于共享公共配置,比如应用名。

2)注解配置

服务提供方注解:

import com.alibaba.dubbo.config.annotation.Service;

@Service(version="1.0.0")

public class FooServiceImpl implements FooService {

    // ......

}

服务提供方配置:

<!-- 公共信息,也可以用dubbo.properties配置 -->

<dubbo:application name="annotation-provider" />

<dubbo:registry address="127.0.0.1:4548" />

<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->

<dubbo:annotation package="com.foo.bar.service" />

服务消费方注解:

import com.alibaba.dubbo.config.annotation.Reference;

import org.springframework.stereotype.Component;

@Component

public class BarAction {

    @Reference(version="1.0.0")

    private FooService fooService;

}

服务消费方配置:

<!-- 公共信息,也可以用dubbo.properties配置 -->

<dubbo:application name="annotation-consumer" />

<dubbo:registry address="127.0.0.1:4548" />

<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->

<dubbo:annotation package="com.foo.bar.action" />

3)API配置,不推荐

时间: 2024-10-20 06:07:55

Dubbo探索(二)的相关文章

Dubbo探索(三)

负载均衡策略 一.Random LoadBalance 原理:按权重设置随机概率,假设有A,B两台服务器,权重比例为A:B=2:1,那么假设当前有30000个并发请求,则分配给A的请求数大概20000个,B的请求数大概10000个. 优缺点: 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重. 二.RoundRobin LoadBalance 原理:轮循,按公约后的权重设置轮循比率. 优缺点: 存在慢的提供者累积请求问题,比如:第二台机器

Dubbo(二) -- Simple Monitor

一.简介 dubbo-monitor-simple是dubbo提供的简单监控中心,可以用来显示接口暴露,注册情况,也可以看接口的调用明细,调用时间等. Simple Monitor挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险. Simple Monitor采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘. charts目录必须放在jetty.directory下,否则页面上访问不了. 配置好了之后可以结合admin管理

dubbo系列二、dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台)

一.zookeeper配置中心安装 1.下载安装包,zookeeper-3.4.6.tar.gz 2.解压安装包,修改配置文件 参考zookeeper-3.4.6/conf/zoo_sample.cfg文件,同步录下建立zoo.cfg,配置如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can tak

Dubbo探索(五)

事件通知 在调用之前,调用之后,出现异常时,会触发oninvoke, onreturn, onthrow三个事件,可以配置当事件发生时,通知哪个类的哪个方法. 消费方实现Notify接口,如下: 1 /** 2 * Version: 3.0 3 * Author: pattywgm 4 * Time: 17/6/29 下午11:01 5 * Desc: 事件通知接口 6 */ 7 public interface Notify { 8 /** 9 * 10 * @param res 返回值 11

dubbo学习 二 dubbo源码大致查阅

源码的解析在官网都已经写的非常详细,可以参考:http://dubbo.io/Developer+Guide-zh.htm 服务提供者暴露一个服务的详细过程 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服

学习dubbo(二): 第1个例子

提供者 接口 public interface SampleService { String sayHello(String name); public List getUsers(); } 接口实现 public class SampleServiceImpl implements SampleService { public String sayHello(String name) { return "Hello " + name; } public List getUsers()

dubbo初探二之简单搭建zookeeper注册中心

jdk须为1.7 pom.xml <dependency>     <groupId>com.netflix.curator</groupId>     <artifactId>curator-framework</artifactId>     <version>1.1.10</version> </dependency> <dependency>     <groupId>org.a

基于 MongoDB 动态字段设计的探索 (二) 聚合操作

业务需求及设计见前文:基于 MongoDB 动态字段设计的探索 根据专业计算各科平均分 (总分.最高分.最低分) public Object avg(String major){ Aggregation aggregation = Aggregation.newAggregation( Aggregation.unwind("courseList"), Aggregation.match(Criteria.where("major").is(major)), Agg

Socket通讯探索(二)-socket集群

前面我们在章节“Socket通讯探索(一)”中如何实现一个tcp连接,但是这仅仅是一个最初级的BIO实现,且没有添加线程池,实际应用中很少采用这种方式,因为不得不考虑当大量的Tcp连接建立的时候,服务端如何安全稳定的运行?为什么呢? 1.BIO实现方式,是阻塞式的(上一节最后面的实现方式虽然无数据的时候,不会阻塞): 2.服务端为每条连接都开辟了一个线程进行处理,而且在连接不断开的情况下,线程不会得到释放: 基于以上情况,当有大量的连接建立的时候,服务端会开辟大量的线程处理并得不到释放,而线程会