准备工作: 1、在idea中打开demo代码 2、启动zookeeper
一、下载dubbo-demo
dubbo的代码托管在了github上,并为开发者提供了丰富的演示案例:https://github.com/apache/dubbo
可通过git命令拉取demo代码:
$ git clone https://github.com/apache/dubbo-samples.git
拉取成功后用idea打开并导入为maven项目,会自动下载依赖项。
注意:目前dubbo最新版已升级到3.0.1。此处下载的演示代码默认版本为2.7.7
二、api方式
1、服务接口与实现
获取消费者传入的name参数,返回拼装好的 'hi' + name
2、服务提供者
src/main/java/org/apache/dubbo/samples/provider/Application.java
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.samples.api.GreetingsService;
import java.util.concurrent.CountDownLatch;
public class Application {
// 获取系统中的属性,不存在则取传入的默认值
private static String zookeeperHost = System
.getProperty("zookeeper.address", "192.168.203.128");
private static String zookeeperPort = System.getProperty("zookeeper.port",
"2181");
public static void main(String[] args) throws Exception {
// 服务提供者实例,内部封装了与注册中心的连接和开启服务端口操作等所有通讯细节
// 实例开销大,实际开发时需要做缓存,否则容易造成内存和连接泄露
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
// 暴露服务配置
// 设置应用名称
service.setApplication(new ApplicationConfig("first-dubbo-provider"));
// 设置注册中心配置 多个注册中心可用setRegistries()
service.setRegistry(new RegistryConfig(
"zookeeper://" + zookeeperHost + ":" + zookeeperPort));
// 设置对外提供的服务接口
service.setInterface(GreetingsService.class);
// 设置服务接口的实现类
service.setRef(new GreetingsServiceImpl());
// 开放服务端口
service.export();
System.out.println("dubbo service started");
// 阻塞当前线程,维持服务提供者状态
new CountDownLatch(1).await();
}
}
除此之外,还有其他信息也可以通过api方式来设置:
// 服务版本信息
service.setVersion("1.0.0");
// 服务提供者协议配置 默认dubbo协议
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(12345);
protocol.setThreads(200);
// 多个协议可用setProtocols()
service.setProtocol(protocol);
3、服务消费者
src/main/java/org/apache/dubbo/samples/client/Application.java
package org.apache.dubbo.samples.client;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
private static String zookeeperHost = System
.getProperty("zookeeper.address", "192.168.203.128");
private static String zookeeperPort = System.getProperty("zookeeper.port",
"2181");
public static void main(String[] args) {
// 服务引用者实例,内部封装了与注册中心的连接和开启服务端口操作等所有通讯细节
// 实例较重,实际开发时需要做缓存,否则容易造成内存和连接泄露
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
// 引用远程服务配置
// 设置应用名称
reference.setApplication(new ApplicationConfig("first-dubbo-consumer"));
// 设置注册中心配置 多个注册中心可以用setRegistries()
reference.setRegistry(new RegistryConfig(
"zookeeper://" + zookeeperHost + ":" + zookeeperPort));
// 设置引用的服务接口
reference.setInterface(GreetingsService.class);
// 和本地使用接口一样使用服务
GreetingsService service = reference.get();
String message = service.sayHi("dubbo");
System.out.println(message);
}
}
除此之外,还有其他信息也可以通过api方式来设置:
// 设置版本信息
reference.setVersion("1.0.0")
4、测试
运行服务提供者与服务消费者的main方法,查看控制台输出日志:
进入虚机查看zookeeper中的服务信息:
# 连接zookeeper客户端
$ [root@localhost zookeeper]# bin/zkCli.sh -server 127.0.0.1:2181
# 查看所有dubbo服务
$ ls /dubbo
5、补充
方法级别设置
// 方法级配置
List<MethodConfig> methods = new ArrayList<MethodConfig>();
MethodConfig method = new MethodConfig();
method.setName("sayHi");
// 设置方法连接超时时间(单位毫秒)
method.setTimeout(10000);
// 设置失败重试次数
method.setRetries(0);
methods.add(method);
// 引用远程服务
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<GreetingsService>();
// 设置方法级配置
reference.setMethods(methods);
点对点直连(需要设置接口)
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<GreetingsService>();
// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心,
// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值,
// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名
reference.setUrl("dubbo://127.0.0.1:20880/org.apache.dubbo.samples.api.GreetingsService");
三、xml配置方式
1、服务接口与实现
2、服务提供者
src/main/resources/spring/dubbo-demo-provider.xml
<?xml version="1.0" encoding="UTF-8"?>
<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" xmlns:context="http://www.springframework.org/schema/context"
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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder/>
<!--应用名称-->
<dubbo:application name="demo-provider"/>
<!--注册中心配置 此案例开启了嵌入式zookeeper,可以不配置虚机的zookeeper地址-->
<dubbo:registry address="zookeeper://${zookeeper.address:127.0.0.1}:2181"/>
<!--开启令牌验证,随机生成动态令牌-->
<dubbo:provider token="true"/>
<!--注入接口实现类-->
<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
<!--服务提供者对外暴露接口-->
<dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
</beans>
src/main/java/org/apache/dubbo/samples/basic/BasicProvider.java
package org.apache.dubbo.samples.basic;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.concurrent.CountDownLatch;
public class BasicProvider {
public static void main(String[] args) throws Exception {
// 启动独立的嵌入式zookeeper实例
new EmbeddedZooKeeper(2181, false).start();
// 等待zookeeper启动
Thread.sleep(1000);
// spring加载配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-demo-provider.xml");
// 启动容器
context.start();
System.out.println("dubbo service started");
new CountDownLatch(1).await();
}
}
3、服务消费者
src/main/resources/spring/dubbo-demo-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<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" xmlns:context="http://www.springframework.org/schema/context"
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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder/>
<!--应用名称-->
<dubbo:application name="demo-consumer"/>
<!--注册中心配置 此案例开启了嵌入式zookeeper,可以不配置虚机的zookeeper地址-->
<dubbo:registry address="zookeeper://${zookeeper.address:127.0.0.1}:2181"/>
<!--服务消费者引用已提供的接口-->
<dubbo:reference id="demoService" check="true" interface="org.apache.dubbo.samples.basic.api.DemoService"/>
</beans>
src/main/java/org/apache/dubbo/samples/basic/BasicConsumer.java
package org.apache.dubbo.samples.basic;
import org.apache.dubbo.samples.basic.api.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BasicConsumer {
public static void main(String[] args) {
// spring加载配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-demo-consumer.xml");
// 启动容器
context.start();
// 从容器中获取服务接口
DemoService demoService = (DemoService) context.getBean("demoService");
// 调用服务
String hello = demoService.sayHello("world");
System.out.println(hello);
// System.out.println("start void test...");
// demoService.testVoid();
}
}
4、测试
运行服务提供者与服务消费者的main方法,查看控制台输出日志:
5、补充
src/main/java/org/apache/dubbo/samples/basic/EmbeddedZooKeeper.java
:
用于启动独立(非集群)zooKeeper 的嵌入式实例的 Helper 类,可以不用为测试代码单独搭建zookeeper实例。
spring-xd(大数据)包中有集成:org.springframework.xd.dirt.zookeeper.EmbeddedZooKeeper
四、annotation注解方式
demo结构(dubbo-samples-annotation):
1、服务接口与实现
2、服务提供者
src/main/resources/spring/dubbo-provider.properties
# dubbo应用名称
dubbo.application.name=samples-annotation-provider
# 注册中心配置连接地址
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
# 配置传输协议
dubbo.protocol.name=dubbo
# 协议端口
dubbo.protocol.port=20880
# 开启随随机令牌,用于身份校验
dubbo.provider.token=true
src/main/java/org/apache/dubbo/samples/annotation/config/ProviderConfiguration.java
package org.apache.dubbo.samples.annotation.config;
import org.apache.dubbo.config.ProviderConfig;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
// 声明这是一个spring配置类
@Configuration
// 开启dubbo,声明并装载扫描包下所有的dubbo服务
@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.impl")
// 声明properties配置文件
@PropertySource("classpath:/spring/dubbo-provider.properties")
public class ProviderConfiguration {
@Bean
public ProviderConfig providerConfig() {
ProviderConfig providerConfig = new ProviderConfig();
// 配置服务提供者连接的超时时间
providerConfig.setTimeout(1000);
return providerConfig;
}
}
src/main/java/org/apache/dubbo/samples/annotation/AnnotationProviderBootstrap.java
package org.apache.dubbo.samples.annotation;
import org.apache.dubbo.samples.annotation.config.ProviderConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.concurrent.CountDownLatch;
public class AnnotationProviderBootstrap {
public static void main(String[] args) throws Exception {
// 启动嵌入式zookeeper
new EmbeddedZooKeeper(2181, false).start();
// 加载配置类作为启动容器上下文
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);
context.start();
System.out.println("dubbo service started.");
new CountDownLatch(1).await();
}
}
3、服务消费者
src/main/resources/spring/dubbo-consumer.properties
# dubbo应用名称
dubbo.application.name=samples-annotation-consumer
# 配置注册中心连接地址
dubbo.registry.address=zookeeper://${zookeeper.address:127.0.0.1}:2181
# 服务消费者超时时间配置,注意:一个服务的调用超时时间会以消费者配置为准
dubbo.consumer.timeout=1000
src/main/java/org/apache/dubbo/samples/annotation/action/AnnotationAction.java
package org.apache.dubbo.samples.annotation.action;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.samples.annotation.AnnotationConstants;
import org.apache.dubbo.samples.annotation.api.GreetingService;
import org.apache.dubbo.samples.annotation.api.HelloService;
import org.springframework.stereotype.Component;
// 声明组件名,项目启动时被扫描并装载进spring容器
@Component("annotationAction")
public class AnnotationAction {
// 声明并注入dubbo服务引用,配置服务接口、版本
@DubboReference(interfaceClass = HelloService.class, version = AnnotationConstants.VERSION)
private HelloService helloService;
// 声明并注入dubbo服务引用,配置服务接口、版本、超时时间、方法(方法名、超时时间、失败重试次数)
@DubboReference(interfaceClass = GreetingService.class,
version = AnnotationConstants.VERSION,
timeout = 1000,
methods = {@Method(name = "greeting", timeout = 3000, retries = 1)})
private GreetingService greetingService;
public String doSayHello(String name) {
try {
return helloService.sayHello(name);
} catch (Exception e) {
e.printStackTrace();
return "Throw Exception";
}
}
public String doSayGoodbye(String name) {
try {
return helloService.sayGoodbye(name);
} catch (Exception e) {
e.printStackTrace();
return "Throw Exception";
}
}
public String doGreeting(String name) {
try {
return greetingService.greeting(name);
} catch (Exception e) {
e.printStackTrace();
return "Throw Exception";
}
}
public String replyGreeting(String name) {
try {
return greetingService.replyGreeting(name);
} catch (Exception e) {
e.printStackTrace();
return "Throw Exception";
}
}
}
src/main/java/org/apache/dubbo/samples/annotation/config/ConsumerConfiguration.java
package org.apache.dubbo.samples.annotation.config;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
// 声名这是一个spring配置类
@Configuration
// 开启dubbo,项目启动时扫描并装载包下的所有dubbo服务
@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.action")
// 引用properties配置
@PropertySource("classpath:/spring/dubbo-consumer.properties")
// 包扫描,将扫描到的类装载进容器
@ComponentScan(value = {"org.apache.dubbo.samples.annotation.action"})
public class ConsumerConfiguration {
}
src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumerBootstrap.java
package org.apache.dubbo.samples.annotation;
import org.apache.dubbo.samples.annotation.action.AnnotationAction;
import org.apache.dubbo.samples.annotation.config.ConsumerConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class AnnotationConsumerBootstrap {
public static void main(String[] args) {
// 加载配置类作为启动容器上下文
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
context.start();
// 从容器中获取对象(annotationAction中引用了dubbo服务)
final AnnotationAction annotationAction = (AnnotationAction) context.getBean("annotationAction");
System.out.println("hello : " + annotationAction.doSayHello("world"));
System.out.println("goodbye : " + annotationAction.doSayGoodbye("world"));
System.out.println("greeting : " + annotationAction.doGreeting("world"));
System.out.println("reply : " + annotationAction.replyGreeting("world"));
}
}
4、测试
运行服务提供者与服务消费者的main方法,查看控制台输出日志:
五、配置总结
1、归纳
标签 | 用途 | 解释 |
---|---|---|
服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 | |
引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 | |
协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 | |
应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 | |
模块配置 | 用于配置当前模块信息,可选 | |
注册中心配置 | 用于配置连接注册中心相关信息 | |
监控中心配置 | 用于配置连接监控中心相关信息,可选 | |
提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 | |
消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 | |
方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 | |
参数配置 | 用于指定方法参数配置 |
2、配置之间的关系
3、配置优先级顺序
以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:
- 方法级优先,接口级次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。(注意:建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置)。
所有配置最终都将转换为 URL 表示,并由服务提供方生成,经注册中心传递给消费方。
理论上 ReferenceConfig 中除了interface这一项,其他所有配置项都可以缺省不配置,框架会自动使用ConsumerConfig,ServiceConfig, ProviderConfig等提供的缺省配置。
引用缺省是懒加载的,只有引用被注入到其它 Bean,或被 getBean() 获取时,才会初始化。如果需要饿加载(没有人引用也立即生成动态代理),可以配置:<dubbo:reference ... init="true" />
4、属性配置
可以将 xml 的 tag 名和属性名组合起来,用 ‘.’ 分隔。每行一个属性。
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" />
优先级从高到低:
- JVM -D 参数:当你部署或者启动应用时,它可以轻易地重写配置,比如,改变 dubbo 协议端口;
- XML:XML 中的当前配置会重写 dubbo.properties 中的;
- Properties:默认配置,仅仅作用于以上两者没有配置时。
- 如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。
- 如果 id 没有在 protocol 中配置,将使用 name 作为默认属性。
5、全部配置
1)dubbo:service
服务提供者暴露服务配置。对应的配置类:org.apache.dubbo.config.ServiceConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
interface | class | 必填 | 服务发现 | 服务接口名 | 1.0.0以上版本 | ||
ref | object | 必填 | 服务发现 | 服务对象实现引用 | 1.0.0以上版本 | ||
version | version | string | 可选 | 0.0.0 | 服务发现 | 服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级 | 1.0.0以上版本 |
group | group | string | 可选 | 服务发现 | 服务分组,当一个接口有多个实现,可以用分组区分 | 1.0.7以上版本 | |
path | string | 可选 | 缺省为接口名 | 服务发现 | 服务路径 (注意:1.0不支持自定义路径,总是使用接口名,如果有1.0调2.0,配置服务路径可能不兼容) | 1.0.12以上版本 | |
delay | delay | int | 可选 | 0 | 性能调优 | 延迟注册服务时间(毫秒) ,设为-1时,表示延迟到Spring容器初始化完成时暴露服务 | 1.0.14以上版本 |
timeout | timeout | int | 可选 | 1000 | 性能调优 | 远程服务调用超时时间(毫秒) | 2.0.0以上版本 |
retries | retries | int | 可选 | 2 | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 | 2.0.0以上版本 |
connections | connections | int | 可选 | 100 | 性能调优 | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 | 2.0.0以上版本 |
loadbalance | loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 | 2.0.0以上版本 |
async | async | boolean | 可选 | false | 性能调优 | 是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 | 2.0.0以上版本 |
local | local | class/boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省代理类名,即:接口名 + Local后缀,已废弃,请使用stub | 2.0.0以上版本 |
stub | stub | class/boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省代理类名,即:接口名 + Stub后缀,服务接口客户端本地代理类名,用于在客户端执行本地逻辑,如本地缓存等,该本地代理类的构造函数必须允许传入远程代理对象,构造函数如:public XxxServiceStub(XxxService xxxService) | 2.0.0以上版本 |
mock | mock | class/boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省Mock类名,即:接口名 + Mock后缀,服务接口调用失败Mock实现类,该Mock类必须有一个无参构造函数,与Local的区别在于,Local总是被执行,而Mock只在出现非业务异常(比如超时,网络异常等)时执行,Local在远程调用之前执行,Mock在远程调用后执行。 | 2.0.0以上版本 |
token | token | string/boolean | 可选 | false | 服务治理 | 令牌验证,为空表示不开启,如果为true,表示随机生成动态令牌,否则使用静态令牌,令牌的作用是防止消费者绕过注册中心直接访问,保证注册中心的授权功能有效,如果使用点对点调用,需关闭令牌功能 | 2.0.0以上版本 |
registry | string | 可选 | 缺省向所有registry注册 | 配置关联 | 向指定注册中心注册,在多个注册中心时使用,值为 |
2.0.0以上版本 | |
provider | string | 可选 | 缺省使用第一个provider配置 | 配置关联 | 指定provider,值为 |
2.0.0以上版本 | |
deprecated | deprecated | boolean | 可选 | false | 服务治理 | 服务是否过时,如果设为true,消费方引用时将打印服务过时警告error日志 | 2.0.5以上版本 |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。 | 2.0.5以上版本 |
accesslog | accesslog | string/boolean | 可选 | false | 服务治理 | 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 | 2.0.5以上版本 |
owner | owner | string | 可选 | 服务治理 | 服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 | |
document | document | string | 可选 | 服务治理 | 服务文档URL | 2.0.5以上版本 | |
weight | weight | int | 可选 | 性能调优 | 服务权重 | 2.0.5以上版本 | |
executes | executes | int | 可选 | 0 | 性能调优 | 服务提供者每服务每方法最大可并行执行请求数 | 2.0.5以上版本 |
proxy | proxy | string | 可选 | javassist | 性能调优 | 生成动态代理方式,可选:jdk/javassist | 2.0.5以上版本 |
cluster | cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking | 2.0.5以上版本 |
filter | service.filter | string | 可选 | default | 性能调优 | 服务提供方远程调用过程拦截器名称,多个名称用逗号分隔 | 2.0.5以上版本 |
listener | exporter.listener | string | 可选 | default | 性能调优 | 服务提供方导出服务监听器名称,多个名称用逗号分隔 | |
protocol | string | 可选 | 配置关联 | 使用指定的协议暴露服务,在多协议时使用,值为 |
2.0.5以上版本 | ||
layer | layer | string | 可选 | 服务治理 | 服务提供者所在的分层。如:biz、dao、intl:web、china:acton。 | 2.0.7以上版本 | |
register | register | boolean | 可选 | true | 服务治理 | 该协议的服务是否注册到注册中心 | 2.0.8以上版本 |
2)dubbo:reference
服务消费者引用服务配置。对应的配置类: org.apache.dubbo.config.ReferenceConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
id | string | 必填 | 配置关联 | 服务引用BeanId | 1.0.0以上版本 | ||
interface | class | 必填 | 服务发现 | 服务接口名 | 1.0.0以上版本 | ||
version | version | string | 可选 | 服务发现 | 服务版本,与服务提供者的版本一致 | 1.0.0以上版本 | |
group | group | string | 可选 | 服务发现 | 服务分组,当一个接口有多个实现,可以用分组区分,必需和服务提供方一致 | 1.0.7以上版本 | |
timeout | timeout | long | 可选 | 缺省使用 |
性能调优 | 服务方法调用超时时间(毫秒) | 1.0.5以上版本 |
retries | retries | int | 可选 | 缺省使用 |
性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 | 2.0.0以上版本 |
connections | connections | int | 可选 | 缺省使用 |
性能调优 | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 | 2.0.0以上版本 |
loadbalance | loadbalance | string | 可选 | 缺省使用 |
性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 | 2.0.0以上版本 |
async | async | boolean | 可选 | 缺省使用 |
性能调优 | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 | 2.0.0以上版本 |
generic | generic | boolean | 可选 | 缺省使用 |
服务治理 | 是否缺省泛化接口,如果为泛化接口,将返回GenericService | 2.0.0以上版本 |
check | check | boolean | 可选 | 缺省使用 |
服务治理 | 启动时检查提供者是否存在,true报错,false忽略 | 2.0.0以上版本 |
url | url | string | 可选 | 服务治理 | 点对点直连服务提供者地址,将绕过注册中心 | 1.0.6以上版本 | |
stub | stub | class/boolean | 可选 | 服务治理 | 服务接口客户端本地代理类名,用于在客户端执行本地逻辑,如本地缓存等,该本地代理类的构造函数必须允许传入远程代理对象,构造函数如:public XxxServiceLocal(XxxService xxxService) | 2.0.0以上版本 | |
mock | mock | class/boolean | 可选 | 服务治理 | 服务接口调用失败Mock实现类名,该Mock类必须有一个无参构造函数,与Local的区别在于,Local总是被执行,而Mock只在出现非业务异常(比如超时,网络异常等)时执行,Local在远程调用之前执行,Mock在远程调用后执行。 | Dubbo1.0.13及其以上版本支持 | |
cache | cache | string/boolean | 可选 | 服务治理 | 以调用参数为key,缓存返回结果,可选:lru, threadlocal, jcache等 | Dubbo2.1.0及其以上版本支持 | |
validation | validation | boolean | 可选 | 服务治理 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 | Dubbo2.1.0及其以上版本支持 | |
proxy | proxy | boolean | 可选 | javassist | 性能调优 | 选择动态代理实现策略,可选:javassist, jdk | 2.0.2以上版本 |
client | client | string | 可选 | 性能调优 | 客户端传输类型设置,如Dubbo协议的netty或mina。 | Dubbo2.0.0以上版本支持 | |
registry | string | 可选 | 缺省将从所有注册中心获服务列表后合并结果 | 配置关联 | 从指定注册中心注册获取服务列表,在多个注册中心时使用,值为 |
2.0.0以上版本 | |
owner | owner | string | 可选 | 服务治理 | 调用服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 | |
actives | actives | int | 可选 | 0 | 性能调优 | 每服务消费者每服务每方法最大并发调用数 | 2.0.5以上版本 |
cluster | cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking | 2.0.5以上版本 |
filter | reference.filter | string | 可选 | default | 性能调优 | 服务消费方远程调用过程拦截器名称,多个名称用逗号分隔 | 2.0.5以上版本 |
listener | invoker.listener | string | 可选 | default | 性能调优 | 服务消费方引用服务监听器名称,多个名称用逗号分隔 | 2.0.5以上版本 |
layer | layer | string | 可选 | 服务治理 | 服务调用者所在的分层。如:biz、dao、intl:web、china:acton。 | 2.0.7以上版本 | |
init | init | boolean | 可选 | false | 性能调优 | 是否在afterPropertiesSet()时饥饿初始化引用,否则等到有人注入或引用该实例时再初始化。 | 2.0.10以上版本 |
protocol | protocol | string | 可选 | 服务治理 | 只调用指定协议的服务提供方,其它协议忽略。 | 2.2.0以上版本 |
3)dubbo:protocol
服务提供者协议配置。对应的配置类: org.apache.dubbo.config.ProtocolConfig
。同时,如果需要支持多协议,可以声明多个 <dubbo:protocol>
标签,并在 <dubbo:service>
中通过 protocol
属性指定使用的协议。
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
id | string | 可选 | dubbo | 配置关联 | 协议BeanId,可以在 |
2.0.5以上版本 | |
name | string | 必填 | dubbo | 性能调优 | 协议名称 | 2.0.5以上版本 | |
port | int | 可选 | dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。 | 服务发现 | 服务端口 | 2.0.5以上版本 | |
host | string | 可选 | 自动查找本机IP | 服务发现 | -服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP | 2.0.5以上版本 | |
threadpool | threadpool | string | 可选 | fixed | 性能调优 | 线程池类型,可选:fixed/cached | 2.0.5以上版本 |
threads | threads | int | 可选 | 200 | 性能调优 | 服务线程池大小(固定大小) | 2.0.5以上版本 |
iothreads | threads | int | 可选 | cpu个数+1 | 性能调优 | io线程池大小(固定大小) | 2.0.5以上版本 |
accepts | accepts | int | 可选 | 0 | 性能调优 | 服务提供方最大可接受连接数 | 2.0.5以上版本 |
payload | payload | int | 可选 | 8388608(=8M) | 性能调优 | 请求及响应数据包大小限制,单位:字节 | 2.0.5以上版本 |
codec | codec | string | 可选 | dubbo | 性能调优 | 协议编码方式 | 2.0.5以上版本 |
serialization | serialization | string | 可选 | dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json | 性能调优 | 协议序列化方式,当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等 | 2.0.5以上版本 |
accesslog | accesslog | string/boolean | 可选 | 服务治理 | 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 | 2.0.5以上版本 | |
path | string | 可选 | 服务发现 | 提供者上下文路径,为服务path的前缀 | 2.0.5以上版本 | ||
transporter | transporter | string | 可选 | dubbo协议缺省为netty | 性能调优 | 协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置 | 2.0.5以上版本 |
server | server | string | 可选 | dubbo协议缺省为netty,http协议缺省为servlet | 性能调优 | 协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等 | 2.0.5以上版本 |
client | client | string | 可选 | dubbo协议缺省为netty | 性能调优 | 协议的客户端实现类型,比如:dubbo协议的mina,netty等 | 2.0.5以上版本 |
dispatcher | dispatcher | string | 可选 | dubbo协议缺省为all | 性能调优 | 协议的消息派发方式,用于指定线程模型,比如:dubbo协议的all, direct, message, execution, connection等 | 2.1.0以上版本 |
queues | queues | int | 可选 | 0 | 性能调优 | 线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程池满时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。 | 2.0.5以上版本 |
charset | charset | string | 可选 | UTF-8 | 性能调优 | 序列化编码 | 2.0.5以上版本 |
buffer | buffer | int | 可选 | 8192 | 性能调优 | 网络读写缓冲区大小 | 2.0.5以上版本 |
heartbeat | heartbeat | int | 可选 | 0 | 性能调优 | 心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开 | 2.0.10以上版本 |
telnet | telnet | string | 可选 | 服务治理 | 所支持的telnet命令,多个命令用逗号分隔 | 2.0.5以上版本 | |
register | register | boolean | 可选 | true | 服务治理 | 该协议的服务是否注册到注册中心 | 2.0.8以上版本 |
contextpath | contextpath | String | 可选 | 缺省为空串 | 服务治理 | 2.0.6以上版本 |
4)dubbo:application
应用信息配置。对应的配置类:org.apache.dubbo.config.ApplicationConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
name | application | string | 必填 | 服务治理 | 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者消费者角色无关,比如:kylin应用调用了morgan应用的服务,则kylin项目配成kylin,morgan项目配成morgan,可能kylin也提供其它服务给别人使用,但kylin项目永远配成kylin,这样注册中心将显示kylin依赖于morgan | 1.0.16以上版本 | |
version | application.version | string | 可选 | 服务治理 | 当前应用的版本 | 2.2.0以上版本 | |
owner | owner | string | 可选 | 服务治理 | 应用负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 | |
organization | organization | string | 可选 | 服务治理 | 组织名称(BU或部门),用于注册中心区分服务来源,此配置项建议不要使用autoconfig,直接写死在配置中,比如china,intl,itu,crm,asc,dw,aliexpress等 | 2.0.0以上版本 | |
architecture |
| architecture
| string | 可选 |
| 服务治理 | 用于服务分层对应的架构。如,intl、china。不同的架构使用不同的分层。 | 2.0.7以上版本 |
| environment | environment | string | 可选 |
| 服务治理 | 应用环境,如:develop/test/product,不同环境使用不同的缺省值,以及作为只用于开发测试功能的限制条件 | 2.0.0以上版本 |
| compiler | compiler | string | 可选 | javassist | 性能优化 | Java字节码编译器,用于动态类的生成,可选:jdk或javassist | 2.1.0以上版本 |
| logger | logger | string | 可选 | slf4j | 性能优化 | 日志输出方式,可选:slf4j,jcl,log4j,log4j2,jdk | 2.2.0以上版本 |
5)dubbo:module
模块信息配置。对应的配置类 org.apache.dubbo.config.ModuleConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
name | module | string | 必填 | 服务治理 | 当前模块名称,用于注册中心计算模块间依赖关系 | 2.2.0以上版本 | |
version | module.version | string | 可选 | 服务治理 | 当前模块的版本 | 2.2.0以上版本 | |
owner | owner | string | 可选 | 服务治理 | 模块负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.2.0以上版本 | |
organization | organization | string | 可选 | 服务治理 | 组织名称(BU或部门),用于注册中心区分服务来源,此配置项建议不要使用autoconfig,直接写死在配置中,比如china,intl,itu,crm,asc,dw,aliexpress等 | 2.2.0以上版本 |
6)dubbo:registry
注册中心配置。对应的配置类: org.apache.dubbo.config.RegistryConfig
。同时如果有多个不同的注册中心,可以声明多个 <dubbo:registry>
标签,并在 <dubbo:service>
或 <dubbo:reference>
的 registry
属性指定使用的注册中心。
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
id | string | 可选 | 配置关联 | 注册中心引用BeanId,可以在 |
1.0.16以上版本 | ||
address | string | 必填 | 服务发现 | 注册中心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个 |
1.0.16以上版本 | ||
protocol | string | 可选 | dubbo | 服务发现 | 注册中心地址协议,支持dubbo, multicast, zookeeper, redis, consul(2.7.1), sofa(2.7.2), etcd(2.7.2), nacos(2.7.2)等协议 | 2.0.0以上版本 | |
port | int | 可选 | 9090 | 服务发现 | 注册中心缺省端口,当address没有带端口时使用此端口做为缺省值 | 2.0.0以上版本 | |
username | string | 可选 | 服务治理 | 登录注册中心用户名,如果注册中心不需要验证可不填 | 2.0.0以上版本 | ||
password | string | 可选 | 服务治理 | 登录注册中心密码,如果注册中心不需要验证可不填 | 2.0.0以上版本 | ||
transport | registry.transporter | string | 可选 | netty | 性能调优 | 网络传输方式,可选mina,netty | 2.0.0以上版本 |
timeout | registry.timeout | int | 可选 | 5000 | 性能调优 | 注册中心请求超时时间(毫秒) | 2.0.0以上版本 |
session | registry.session | int | 可选 | 60000 | 性能调优 | 注册中心会话超时时间(毫秒),用于检测提供者非正常断线后的脏数据,比如用心跳检测的实现,此时间就是心跳间隔,不同注册中心实现不一样。 | 2.1.0以上版本 |
file | registry.file | string | 可选 | 服务治理 | 使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储 | 2.0.0以上版本 | |
wait | registry.wait | int | 可选 | 0 | 性能调优 | 停止时等待通知完成时间(毫秒) | 2.0.0以上版本 |
check | check | boolean | 可选 | true | 服务治理 | 注册中心不存在时,是否报错 | 2.0.0以上版本 |
register | register | boolean | 可选 | true | 服务治理 | 是否向此注册中心注册服务,如果设为false,将只订阅,不注册 | 2.0.5以上版本 |
subscribe | subscribe | boolean | 可选 | true | 服务治理 | 是否向此注册中心订阅服务,如果设为false,将只注册,不订阅 | 2.0.5以上版本 |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示为disable状态,需人工启用,并且服务提供者停止时,也不会自动取消注册,需人工禁用。 | 2.0.5以上版本 |
group | group | string | 可选 | dubbo | 服务治理 | 服务注册分组,跨组的服务不会相互影响,也无法相互调用,适用于环境隔离。 | 2.0.5以上版本 |
simplified | simplified | boolean | 可选 | false | 服务治理 | 注册到注册中心的URL是否采用精简模式的(与低版本兼容) | 2.7.0以上版本 |
extra-keys | extraKeys | string | 可选 | 服务治理 | 在simplified=true时,extraKeys允许你在默认参数外将额外的key放到URL中,格式:“interface,key1,key2”。 | 2.7.0以上版本 |
7)dubbo:monitor
监控中心配置。对应的配置类: org.apache.dubbo.config.MonitorConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
protocol | protocol | string | 可选 | dubbo | 服务治理 | 监控中心协议,如果为protocol=“registry”,表示从注册中心发现监控中心地址,否则直连监控中心。 | 2.0.9以上版本 |
address | string | 可选 | N/A | 服务治理 | 直连监控中心服务器地址,address=“10.20.130.230:12080” | 1.0.16以上版本 |
8)dubbo:provider
服务提供者缺省值配置。对应的配置类: org.apache.dubbo.config.ProviderConfig
。同时该标签为 <dubbo:service>
和 <dubbo:protocol>
标签的缺省值设置。
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
id | string | 可选 | dubbo | 配置关联 | 协议BeanId,可以在 |
1.0.16以上版本 | |
protocol | string | 可选 | dubbo | 性能调优 | 协议名称 | 1.0.16以上版本 | |
host | string | 可选 | 自动查找本机IP | 服务发现 | 服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,建议不要配置,让Dubbo自动获取本机IP | 1.0.16以上版本 | |
threads | threads | int | 可选 | 200 | 性能调优 | 服务线程池大小(固定大小) | 1.0.16以上版本 |
payload | payload | int | 可选 | 8388608(=8M) | 性能调优 | 请求及响应数据包大小限制,单位:字节 | 2.0.0以上版本 |
path | string | 可选 | 服务发现 | 提供者上下文路径,为服务path的前缀 | 2.0.0以上版本 | ||
server | server | string | 可选 | dubbo协议缺省为netty,http协议缺省为servlet | 性能调优 | 协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等 | 2.0.0以上版本 |
client | client | string | 可选 | dubbo协议缺省为netty | 性能调优 | 协议的客户端实现类型,比如:dubbo协议的mina,netty等 | 2.0.0以上版本 |
codec | codec | string | 可选 | dubbo | 性能调优 | 协议编码方式 | 2.0.0以上版本 |
serialization | serialization | string | 可选 | dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json | 性能调优 | 协议序列化方式,当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json,xml等 | 2.0.5以上版本 |
default | boolean | 可选 | false | 配置关联 | 是否为缺省协议,用于多协议 | 1.0.16以上版本 | |
filter | service.filter | string | 可选 | 性能调优 | 服务提供方远程调用过程拦截器名称,多个名称用逗号分隔 | 2.0.5以上版本 | |
listener | exporter.listener | string | 可选 | 性能调优 | 服务提供方导出服务监听器名称,多个名称用逗号分隔 | 2.0.5以上版本 | |
threadpool | threadpool | string | 可选 | fixed | 性能调优 | 线程池类型,可选:fixed/cached/limit(2.5.3以上)/eager(2.6.x以上) | 2.0.5以上版本 |
accepts | accepts | int | 可选 | 0 | 性能调优 | 服务提供者最大可接受连接数 | 2.0.5以上版本 |
version | version | string | 可选 | 0.0.0 | 服务发现 | 服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级 | 2.0.5以上版本 |
group | group | string | 可选 | 服务发现 | 服务分组,当一个接口有多个实现,可以用分组区分 | 2.0.5以上版本 | |
delay | delay | int | 可选 | 0 | 性能调优 | 延迟注册服务时间(毫秒)- ,设为-1时,表示延迟到Spring容器初始化完成时暴露服务 | 2.0.5以上版本 |
timeout | default.timeout | int | 可选 | 1000 | 性能调优 | 远程服务调用超时时间(毫秒) | 2.0.5以上版本 |
retries | default.retries | int | 可选 | 2 | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 | 2.0.5以上版本 |
connections | default.connections | int | 可选 | 0 | 性能调优 | 对每个提供者的最大连接数,rmi、http、hessian等短连接协议表示限制连接数,dubbo等长连接协表示建立的长连接个数 | 2.0.5以上版本 |
loadbalance | default.loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 | 2.0.5以上版本 |
async | default.async | boolean | 可选 | false | 性能调优 | 是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 | 2.0.5以上版本 |
stub | stub | boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省代理类名,即:接口名 + Local后缀。 | 2.0.5以上版本 |
mock | mock | boolean | 可选 | false | 服务治理 | 设为true,表示使用缺省Mock类名,即:接口名 + Mock后缀。 | 2.0.5以上版本 |
token | token | boolean | 可选 | false | 服务治理 | 令牌验证,为空表示不开启,如果为true,表示随机生成动态令牌 | 2.0.5以上版本 |
registry | registry | string | 可选 | 缺省向所有registry注册 | 配置关联 | 向指定注册中心注册,在多个注册中心时使用,值为 |
2.0.5以上版本 |
dynamic | dynamic | boolean | 可选 | true | 服务治理 | 服务是否动态注册,如果设为false,注册后将显示后disable状态,需人工启用,并且服务提供者停止时,也不会自动取消册,需人工禁用。 | 2.0.5以上版本 |
accesslog | accesslog | string/boolean | 可选 | false | 服务治理 | 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 | 2.0.5以上版本 |
owner | owner | string | 可选 | 服务治理 | 服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 | |
document | document | string | 可选 | 服务治理 | 服务文档URL | 2.0.5以上版本 | |
weight | weight | int | 可选 | 性能调优 | 服务权重 | 2.0.5以上版本 | |
executes | executes | int | 可选 | 0 | 性能调优 | 服务提供者每服务每方法最大可并行执行请求数 | 2.0.5以上版本 |
actives | default.actives | int | 可选 | 0 | 性能调优 | 每服务消费者每服务每方法最大并发调用数 | 2.0.5以上版本 |
proxy | proxy | string | 可选 | javassist | 性能调优 | 生成动态代理方式,可选:jdk/javassist | 2.0.5以上版本 |
cluster | default.cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking | 2.0.5以上版本 |
deprecated | deprecated | boolean | 可选 | false | 服务治理 | 服务是否过时,如果设为true,消费方引用时将打印服务过时警告error日志 | 2.0.5以上版本 |
queues | queues | int | 可选 | 0 | 性能调优 | 线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程池满时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。 | 2.0.5以上版本 |
charset | charset | string | 可选 | UTF-8 | 性能调优 | 序列化编码 | 2.0.5以上版本 |
buffer | buffer | int | 可选 | 8192 | 性能调优 | 网络读写缓冲区大小 | 2.0.5以上版本 |
iothreads | iothreads | int | 可选 | CPU + 1 | 性能调优 | IO线程池,接收网络读写中断,以及序列化和反序列化,不处理业务,业务线程池参见threads配置,此线程池和CPU相关,不建议配置。 | 2.0.5以上版本 |
telnet | telnet | string | 可选 | 服务治理 | 所支持的telnet命令,多个命令用逗号分隔 | 2.0.5以上版本 | |
contextpath | contextpath | String | 可选 | 缺省为空串 | 服务治理 | ||
layer | layer | string | 可选 | 服务治理 | 服务提供者所在的分层。如:biz、dao、intl:web、china:acton。 | 2.0.7以上版本 |
9)dubbo:consumer
服务消费者缺省值配置。配置类: org.apache.dubbo.config.ConsumerConfig
。同时该标签为 <dubbo:reference>
标签的缺省值设置。
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
timeout | default.timeout | int | 可选 | 1000 | 性能调优 | 远程服务调用超时时间(毫秒) | 1.0.16以上版本 |
retries | default.retries | int | 可选 | 2 | 性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0,仅在cluster为failback/failover时有效 | 1.0.16以上版本 |
loadbalance | default.loadbalance | string | 可选 | random | 性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 | 1.0.16以上版本 |
async | default.async | boolean | 可选 | false | 性能调优 | 是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 | 2.0.0以上版本 |
connections | default.connections | int | 可选 | 100 | 性能调优 | 每个服务对每个提供者的最大连接数,rmi、http、hessian等短连接协议支持此配置,dubbo协议长连接不支持此配置 | 1.0.16以上版本 |
generic | generic | boolean | 可选 | false | 服务治理 | 是否缺省泛化接口,如果为泛化接口,将返回GenericService | 2.0.0以上版本 |
check | check | boolean | 可选 | true | 服务治理 | 启动时检查提供者是否存在,true报错,false忽略 | 1.0.16以上版本 |
proxy | proxy | string | 可选 | javassist | 性能调优 | 生成动态代理方式,可选:jdk/javassist | 2.0.5以上版本 |
owner | owner | string | 可选 | 服务治理 | 调用服务负责人,用于服务治理,请填写负责人公司邮箱前缀 | 2.0.5以上版本 | |
actives | default.actives | int | 可选 | 0 | 性能调优 | 每服务消费者每服务每方法最大并发调用数 | 2.0.5以上版本 |
cluster | default.cluster | string | 可选 | failover | 性能调优 | 集群方式,可选:failover/failfast/failsafe/failback/forking | 2.0.5以上版本 |
filter | reference.filter | string | 可选 | 性能调优 | 服务消费方远程调用过程拦截器名称,多个名称用逗号分隔 | 2.0.5以上版本 | |
listener | invoker.listener | string | 可选 | 性能调优 | 服务消费方引用服务监听器名称,多个名称用逗号分隔 | 2.0.5以上版本 | |
registry | string | 可选 | 缺省向所有registry注册 | 配置关联 | 向指定注册中心注册,在多个注册中心时使用,值为 |
2.0.5以上版本 | |
layer | layer | string | 可选 | 服务治理 | 服务调用者所在的分层。如:biz、dao、intl:web、china:acton。 | 2.0.7以上版本 | |
init | init | boolean | 可选 | false | 性能调优 | 是否在afterPropertiesSet()时饥饿初始化引用,否则等到有人注入或引用该实例时再初始化。 | 2.0.10以上版本 |
cache | cache | string/boolean | 可选 | 服务治理 | 以调用参数为key,缓存返回结果,可选:lru, threadlocal, jcache等 | Dubbo2.1.0及其以上版本支持 | |
validation | validation | boolean | 可选 | 服务治理 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 | Dubbo2.1.0及其以上版本支持 |
10)dubbo:method
方法级配置。对应的配置类: org.apache.dubbo.config.MethodConfig
。同时该标签为 <dubbo:service>
或 <dubbo:reference>
的子标签,用于控制到方法级。比如:
<dubbo:reference interface="com.xxx.XxxService">
<dubbo:method name="findXxx" timeout="3000" retries="2" />
</dubbo:reference>
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
name | string | 必填 | 标识 | 方法名 | 1.0.8以上版本 | ||
timeout | int | 可选 | 缺省为 |
性能调优 | 方法调用超时时间(毫秒) | 1.0.8以上版本 | |
retries | int | 可选 | 缺省为 |
性能调优 | 远程服务调用重试次数,不包括第一次调用,不需要重试请设为0 | 2.0.0以上版本 | |
loadbalance | string | 可选 | 缺省为 |
性能调优 | 负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮询,最少活跃调用 | 2.0.0以上版本 | |
async | boolean | 可选 | 缺省为 |
性能调优 | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 | 1.0.9以上版本 | |
sent | boolean | 可选 | true | 性能调优 | 异步调用时,标记sent=true时,表示网络已发出数据 | 2.0.6以上版本 | |
actives | int | 可选 | 0 | 性能调优 | 每服务消费者最大并发调用限制 | 2.0.5以上版本 | |
executes | int | 可选 | 0 | 性能调优 | 每服务每方法最大使用线程数限制- -,此属性只在 |
2.0.5以上版本 | |
deprecated | boolean | 可选 | false | 服务治理 | 服务方法是否过时,此属性只在 |
2.0.5以上版本 | |
sticky | boolean | 可选 | false | 服务治理 | 设置true 该接口上的所有方法使用同一个provider.如果需要更复杂的规则,请使用路由 | 2.0.6以上版本 | |
return | boolean | 可选 | true | 性能调优 | 方法调用是否需要返回值,async设置为true时才生效,如果设置为true,则返回future,或回调onreturn等方法,如果设置为false,则请求发送成功后直接返回Null | 2.0.6以上版本 | |
oninvoke | attribute属性,不在URL中体现 | String | 可选 | 性能调优 | 方法执行前拦截 | 2.0.6以上版本 | |
onreturn | attribute属性,不在URL中体现 | String | 可选 | 性能调优 | 方法执行返回后拦截 | 2.0.6以上版本 | |
onthrow | attribute属性,不在URL中体现 | String | 可选 | 性能调优 | 方法执行有异常拦截 | 2.0.6以上版本 | |
cache | string/boolean | 可选 | 服务治理 | 以调用参数为key,缓存返回结果,可选:lru, threadlocal, jcache等 | Dubbo2.1.0及其以上版本支持 | ||
validation | boolean | 可选 | 服务治理 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 | Dubbo2.1.0及其以上版本支持 |
11)dubbo:argument
方法参数配置。对应的配置类: org.apache.dubbo.config.ArgumentConfig。该标签为
<dubbo:method name="findXxx" timeout="3000" retries="2">
<dubbo:argument index="0" callback="true" />
</dubbo:method>
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
index | int | 必填 | 标识 | 参数索引 | 2.0.6以上版本 | ||
type | String | 与index二选一 | 标识 | 通过参数类型查找参数的index | 2.0.6以上版本 | ||
callback | boolean | 可选 | 服务治理 | 参数是否为callback接口,如果为callback,服务提供方将生成反向代理,可以从服务提供方反向调用消费方,通常用于事件推送. | 2.0.6以上版本 |
12)dubbo:config-center
配置中心。对应的配置类:org.apache.dubbo.config.ConfigCenterConfig
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 描述 | 兼容性 |
---|---|---|---|---|---|---|
protocol | config.protocol | string | 可选 | zookeeper | 使用哪个配置中心:apollo、zookeeper、nacos等。 以zookeeper为例 1. 指定protocol,则address可以简化为127.0.0.1:2181; 2. 不指定protocol,则address取值为zookeeper://127.0.0.1:2181 |
2.7.0+ |
address | config.address | string | 必填 | 配置中心地址。 取值参见protocol说明 |
2.7.0+ | |
highest-priority | config.highestPriority | boolean | 可选 | true | 来自配置中心的配置项具有最高优先级,即会覆盖本地配置项。 | 2.7.0+ |
namespace | config.namespace | string | 可选 | dubbo | 通常用于多租户隔离,实际含义视具体配置中心而不同。 如: zookeeper - 环境隔离,默认值dubbo; apollo - 区分不同领域的配置集合,默认使用dubbo和application |
2.7.0+ |
cluster | config.cluster | string | 可选 | 含义视所选定的配置中心而不同。 如Apollo中用来区分不同的配置集群 |
2.7.0+ | |
group | config.group | string | 可选 | dubbo | 含义视所选定的配置中心而不同。 nacos - 隔离不同配置集 zookeeper - 隔离不同配置集 |
2.7.0+ |
check | config.check | boolean | 可选 | true | 当配置中心连接失败时,是否终止应用启动。 | 2.7.0+ |
config-file | config.configFile | string | 可选 | dubbo.properties | 全局级配置文件所映射到的key zookeeper - 默认路径/dubbo/config/dubbo/dubbo.properties apollo - dubbo namespace中的dubbo.properties键 |
2.7.0+ |
timeout | config.timeout | integer | 3000ms | 获取配置的超时时间 | 2.7.0+ | |
username | string | 如果配置中心需要做校验,用户名 Apollo暂未启用 |
2.7.0+ | |||
password | string | 如果配置中心需要做校验,密码 Apollo暂未启用 |
2.7.0+ | |||
parameters | Map |
扩展参数,用来支持不同配置中心的定制化配置参数 | 2.7.0+ | |||
include-spring-env | boolean | 可选 | false | 使用Spring框架时支持,为true时,会自动从Spring Environment中读取配置。 默认依次读取 key为dubbo.properties的配置 key为dubbo.properties的PropertySource |
2.7.0+ |
13)dubbo:parameter
选项参数配置。对应的配置类:java.util.Map
。同时该标签为<dubbo:protocol>
或<dubbo:service>
或<dubbo:provider>
或<dubbo:reference>
或<dubbo:consumer>
的子标签,用于配置自定义参数,该配置项将作为扩展点设置自定义参数使用。比如:
<dubbo:protocol name="napoli">
<dubbo:parameter key="http://10.20.160.198/wiki/display/dubbo/napoli.queue.name" value="xxx" />
</dubbo:protocol>
<!--或-->
<dubbo:protocol name="jms" p:queue="xxx" />
属性 | 对应URL参数 | 类型 | 是否必填 | 缺省值 | 作用 | 描述 | 兼容性 |
---|---|---|---|---|---|---|---|
key | key | string | 必填 | 服务治理 | 路由参数键 | 2.0.0以上版本 | |
value | value | string | 必填 | 服务治理 | 路由参数值 | 2.0.0以上版本 |
六、常见问题
1、连接超时
1)连接注册中心
连接报错:
Caused by: java.lang.IllegalStateException: zookeeper not connected at org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.
(CuratorZookeeperClient.java:80) … 34 more
dubbo连接zookeeper,注册中心请求超时时间(毫秒)会由两个配置影响:
注册中心registry默认5s,配置中心config默认3s
跟踪源代码,发现dubbo会先在注册中心中找timeout配置,不存在则取配置中心默认的配置:
可通过更改超时时间解决。
基于xml:
<dubbo:registry address="zookeeper://${zookeeper.address:localhost}:2181" timeout="5000"/>
<!--或-->
<dubbo:config-center timeout="5000"></dubbo:config-center>
基于properties/yml:
dubbo.registry.timeout=5000
也直接在url后添加参数(不推荐):
dubbo.registry.address=zookeeper://${zookeeper.address:localhost}:${zookeeper.port:2181}?timeout=5000
2)连接服务
报错:
Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout. start time: 2017-08-0518:14:52.751, end time: 2017-08-0518:14:53.764, client elapsed: 6 ms, server elapsed: 1006 ms, timeout: 1000 ms, request: Request [id=0, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=getCommentsByProductId, parameterTypes=[classjava.lang.Long], arguments=[1], attachments={traceId=6299543007105572864, spanId=6299543007105572864, input=259, path=com.jim.framework.dubbo.core.service.CommentService, interface=com.jim.framework.dubbo.core.service.CommentService, version=0.0.0}]]
dubbo的超时是针对客户端的,dubbo默认采用了netty做为网络组件,它属于一种NIO的模式。消费端发起远程请求后,线程不会阻塞等待服务端的返回,而是马上得到一个ResponseFuture,消费端通过不断的轮询机制判断结果是否有返回。因为是通过轮询,轮询有个需要特别注要的就是避免死循环,所以为了解决这个问题就引入了超时机制,只在一定时间范围内做轮询,如果超时时间就返回超时异常。
虽然超时了,但仅仅是消费端不再等待服务端的反馈,并不代表此时服务端也停止了执行。
可以通过更改超时时间解决。
服务消费者:
全局控制
<dubbo:consumer timeout="1000"></dubbo:consumer>
接口控制
<dubbo:reference timeout="1000"></dubbo:reference>
方法控制
<dubbo:method timeout="1000"></dubbo:method>
服务提供者:
全局控制
<dubbo:provider timeout="1000"></dubbo:provider>
接口控制
<dubbo:service timeout="1000"></dubbo:service>
方法控制
<dubbo:method timeout="1000"></dubbo:method>
参考资料: Dubbo 官方文档