Dubbo的配置

Dubbo Provider服务提供者要控制执行并发请求上限,具体怎么做

服务端并发限流:executes

客户端并发限流:actives

样例 1

限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:

样例 2

限制 com.foo.BarService  sayHello 方法,服务器端并发执行(或占用线程池线程数)不能 超过 10 个:

样例 3 限制 com.foo.BarService 的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

样例 4

限制 com.foo.BarService  sayHello 方法,每客户端并发执行(或占用连接的请求数)不能 超过 10 个:

并发控制

配置样例

样例 1

限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:

样例 2

限制 com.foo.BarService sayHello 方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:

<dubbo:serviceinterface="..."loadbalance="roundrobin"/>

<dubbo:service interface="com.foo.BarService" executes="10" />

<dubbo:service interface="com.foo.BarService">

<dubbo:method name="sayHello" executes="10" />

</dubbo:service>

<dubbo:service interface="com.foo.BarService" actives="10" />

<dubbo:reference interface="com.foo.BarService" actives="10" />

<dubbo:service interface="com.foo.BarService">

<dubbo:method name="sayHello" actives="10" />

</dubbo:service>

<dubbo:reference interface="com.foo.BarService">

<dubbo:method name="sayHello" actives="10" />

</dubbo:service>

<dubbo:service interface="com.foo.BarService" executes="10" />

<dubbo:service interface="com.foo.BarService">

<dubbo:method name="sayHello" executes="10" />

</dubbo:service>样例 3

限制 com.foo.BarService 的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

样例 4

限制 com.foo.BarService sayHello 方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

如果 <dubbo:service> <dubbo:reference> 都配了actives<dubbo:reference> 优先

配置服务的客户端的 loadbalance 属性为 leastactive ,此 Loadbalance 会调用并发数最小的 ProviderConsumer端并发数)。

Dubbo启动的时候支持几种配置方式?

XML 配置

provider.xml 示例

consumer.xml示例

所有标签都支持自定义参数,用于不同扩展点实现的特殊配置,如:

<dubbo:service interface="com.foo.BarService" actives="10" />

<dubbo:reference interface="com.foo.BarService" actives="10" />

<dubbo:service interface="com.foo.BarService">

<dubbo:method name="sayHello" actives="10" />

</dubbo:service>

<dubbo:reference interface="com.foo.BarService">

<dubbo:method name="sayHello" actives="10" />

</dubbo:service>

<dubbo:reference interface="com.foo.BarService" loadbalance="leastactive" />

<dubbo:service interface="com.foo.BarService" loadbalance="leastactive" />

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xmlns="http://www.springframework.org/schema/beans"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

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

<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

<dubbo:protocol name="dubbo" port="20890"/>

<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>

<dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>

</beans>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xmlns="http://www.springframework.org/schema/beans"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

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

<dubbo:registry group="aaa" address="zookeeper://127.0.0.1:2181"/>

<dubbo:reference id="demoService" check="false"

interface="org.apache.dubbo.samples.basic.api.DemoService"/>

</beans>

<dubbo:protocol name="jms">

<dubbo:parameter key="queue" value="your_queue" />

</dubbo:protocol>标签

用途

解释

<dubbo:service/>

服务配置

用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以

注册到多个注册中心

<dubbo:reference/>

引用配置

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

<dubbo:protocol/>

协议配置

用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

<dubbo:application/>

应用配置

用于配置当前应用信息,不管该应用是提供者还是消费者

<dubbo:module/>

模块配置

用于配置当前模块信息,可选

<dubbo:registry/>

注册中心

配置

用于配置连接注册中心相关信息

<dubbo:monitor/>

监控中心

配置

用于配置连接监控中心相关信息,可选

<dubbo:provider/>

提供方配

 ProtocolConfig  ServiceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:consumer/>

消费方配

 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:method/>

方法配置

用于 ServiceConfig  ReferenceConfig 指定方法级的配置信息

<dubbo:argument/>

参数配置

用于指定方法参数配置

或: [1]

配置之间的关系

不同粒度配置的覆盖关系

 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:

方法级优先,接口级次之,全局配置再次之。

如果级别一样,则消费方优先,提供方次之。

其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo

http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

<dubbo:protocol name="jms" p:queue="your_queue" />

</beans>(建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每

个服务的超时设置)。

理论上 ReferenceConfig 中除了 interface 这一项,其他所有配置项都可以缺省不配置,框架会自动使用ConsumerConfig

ServiceConfig, ProviderConfig等提供的缺省配置。

1. 2.1.0 开始支持,注意声明: xmlns:p="http://www.springframework.org/schema/p"

2. 引用缺省是延迟初始化的,只有引用被注入到其它 Bean,或被 getBean() 获取,才会初始化。如果需要饥饿加载,即没有人引用也

立即生成动态代理,可以配置: <dubbo:reference ... init="true" />

属性配置

如果你的应用足够简单,例如,不需要多注册中心或多协议,并且需要在spring容器中共享配置,那么,我们可以直接使用

dubbo.properties 作为默认配置。

Dubbo可以自动加载classpath根目录下的dubbo.properties,但是你同样可以使用JVM参数来指定路径: -

Ddubbo.properties.file=xxx.properties

映射规则

可以将xmltag名和属性名组合起来,用‘.’分隔。每行一个属性。

dubbo.application.name=foo 相当于 <dubbo:application name="foo" />

dubbo.registry.address=10.20.153.10:9090 相当于 <dubbo:registry address="10.20.153.10:9090" />

如果在xml配置中有超过一个的tag,那么你可以使用‘id’进行区分。如果你不指定id,它将作用于所有tag

dubbo.protocol.rmi.port=1099 相当于 <dubbo:protocol id="rmi" name="rmi" port="1099" />

dubbo.registry.china.address=10.20.153.10:9090 相当于 <dubbo:registry id="china" address="10.20.153.10:9090"

/>

如下,是一个典型的dubbo.properties配置样例。

重写与优先级

dubbo.application.name=foo

dubbo.application.owner=bar

dubbo.registry.address=10.20.153.10:9090优先级从高到低:

JVM -D参数,当你部署或者启动应用时,它可以轻易地重写配置,比如,改变dubbo协议端口;

XML, XML中的当前配置会重写dubbo.properties中的;

Properties,默认配置,仅仅作用于以上两者没有配置时。

1:如果在classpath下有超过一个dubbo.properties文件,比如,两个jar包都各自包含了dubbo.propertiesdubbo将随机选择一个加

载,并且打印错误日志。

2:如果 id 没有在 protocol 中配置,将使用 name 作为默认属性。

API 配置

服务提供者

服务消费者

import org.apache.dubbo.rpc.config.ApplicationConfig;

import org.apache.dubbo.rpc.config.RegistryConfig;

import org.apache.dubbo.rpc.config.ProviderConfig;

import org.apache.dubbo.rpc.config.ServiceConfig;

import com.xxx.XxxService;

import com.xxx.XxxServiceImpl;

// 服务实现

XxxService xxxService = new XxxServiceImpl();

// 当前应用配置

ApplicationConfig application = new ApplicationConfig();

application.setName("xxx");

// 连接注册中心配置

RegistryConfig registry = new RegistryConfig();

registry.setAddress("10.20.130.230:9090");

registry.setUsername("aaa");

registry.setPassword("bbb");

// 服务提供者协议配置

ProtocolConfig protocol = new ProtocolConfig();

protocol.setName("dubbo");

protocol.setPort(12345);

protocol.setThreads(200);

// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口

// 服务提供者暴露服务配置

ServiceConfig<XxxService> service = new ServiceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接,请自行缓

存,否则可能造成内存和连接泄漏

service.setApplication(application);

service.setRegistry(registry); // 多个注册中心可以用setRegistries()

service.setProtocol(protocol); // 多个协议可以用setProtocols()

service.setInterface(XxxService.class);

service.setRef(xxxService);

service.setVersion("1.0.0");

// 暴露及注册服务

service.export();

import org.apache.dubbo.rpc.config.ApplicationConfig;

import org.apache.dubbo.rpc.config.RegistryConfig;

import org.apache.dubbo.rpc.config.ConsumerConfig;

import org.apache.dubbo.rpc.config.ReferenceConfig;特殊场景

下面只列出不同的地方,其它参见上面的写法

方法级设置

点对点直连

1. API使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock 等系统集成,普通服务提供方或消费方,请采用XML 配置方式使用 Dubbo

注解配置

服务提供方

Service 注解暴露服务

import com.xxx.XxxService;

// 当前应用配置

ApplicationConfig application = new ApplicationConfig();

application.setName("yyy");

// 连接注册中心配置

RegistryConfig registry = new RegistryConfig();

registry.setAddress("10.20.130.230:9090");

registry.setUsername("aaa");

registry.setPassword("bbb");

// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接

// 引用远程服务

ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及

与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏

reference.setApplication(application);

reference.setRegistry(registry); // 多个注册中心可以用setRegistries()

reference.setInterface(XxxService.class);

reference.setVersion("1.0.0");

// 和本地bean一样使用xxxService

XxxService xxxService = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用

...

// 方法级配置

List<MethodConfig> methods = new ArrayList<MethodConfig>();

MethodConfig method = new MethodConfig();

method.setName("createXxx");

method.setTimeout(10000);

method.setRetries(0);

methods.add(method);

// 引用远程服务

ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及

与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏

...

reference.setMethods(methods); // 设置方法级配置

...

...

ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及

与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏

// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心,

// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值,

// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名

reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");

...

@Service

public class AnnotationServiceImpl implements AnnotationService {

@Override

public String sayHello(String name) {

return "annotation: hello, " + name;

}

}增加应用共享配置

指定Spring扫描路径

服务消费方

Reference 注解引用服务

增加应用共享配置

指定Spring扫描路径

调用服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大先锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值