使用Dubbo的最常用方法是在Spring框架中运行它。以下内容将指导您使用Spring框架的XML配置开发Dubbo应用程序。
如果您不想依赖Spring,可以尝试使用API配置。
首先让我们创建一个名为dubbo-demo的根目录:
mkdir dubbo-demo
cd dubbo-demo
接下来,我们将在根目录下创建3个子目录:
DemoService.java [1]:
package org.apache.dubbo.demo;
public interface DemoService {
String sayHello(String name);
}
proejct结构应如下所示:
.
├── dubbo-demo-api
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── org
│ └── apache
│ └── dubbo
│ └── demo
│ └── DemoService.java
DemoServiceImpl.java [2]:
package org.apache.dubbo.demo.provider;
import org.apache.dubbo.demo.DemoService;
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
的provider.xml:
<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-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider"/>
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<dubbo:protocol name="dubbo" port="20880"/>
<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/>
beans>
该演示使用多播作为注册表,因为它很简单,不需要额外的安装。如果您喜欢像zookeeper这样的注册,请在这里查看示例。
Dubbo默认使用log4j作为日志系统,它还支持slf4j,Apache Commons Logging和JUL日志记录。
以下是示例配置:
log4j.properties
###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
Provider.java
package org.apache.dubbo.demo.provider;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
System.setProperty("java.net.preferIPv4Stack", "true");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
System.out.println("Provider started.");
System.in.read(); // press any key to exit
}
}
最后,项目结构应如下所示:
├── dubbo-demo-provider
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── org
│ │ └── apache
│ │ └── dubbo
│ │ └── demo
│ │ └── provider
│ │ ├── DemoServiceImpl.java
│ │ └── Provider.java
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── dubbo-demo-provider.xml
│ └── log4j.properties
完整的安装步骤,请参阅:消费者演示安装
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"
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:application name="demo-consumer"/>
<dubbo:registry address="multicast://224.5.6.7:1234"/>
<dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.demo.DemoService"/>
beans>
Consumer.java [3]:
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
// Obtaining a remote service proxy
DemoService demoService = (DemoService)context.getBean("demoService");
// Executing remote methods
String hello = demoService.sayHello("world");
// Display the call result
System.out.println(hello);
}
}
这与如何在提供者端配置它相同。
最后,项目结构应如下所示:
├── dubbo-demo-consumer
│ ├── pom.xml
│ └── src
│ └── main
│ ├── java
│ │ └── org
│ │ └── apache
│ │ └── dubbo
│ │ └── demo
│ │ └── consumer
│ │ └── Consumer.java
│ └── resources
│ ├── META-INF
│ │ └── spring
│ │ └── dubbo-demo-consumer.xml
│ └── log4j.properties
运行org.apache.dubbo.demo.provider.Provider
该类以启动提供程序。
运行org.apache.dubbo.demo.provider.Consumer
该类以启动使用者,您应该能够看到以下结果:
Hello world
您可以在Github存储库中找到完整的示例代码。
接口需要单独打包,由服务提供商和消费者共享
隐藏服务消费者的实现↩︎
也可以使用IoC注入↩︎
JDK 1.6+ [1]
使用mvn dependency:tree > dep.log
命令进行分析,Dubbo默认依赖于以下第三方库:
[INFO] +- com.alibaba:dubbo:jar:2.5.9-SNAPSHOT:compile
[INFO] | +- org.springframework:spring-context:jar:4.3.10.RELEASE:compile
[INFO] | +- org.javassist:javassist:jar:3.21.0-GA:compile
[INFO] | \- org.jboss.netty:netty:jar:3.2.5.Final:compile
此处的所有依赖项都是针对Dubbo的默认配置选择的,这些配置基于稳定性和性能考虑因素。
or
,or
,不是必需的。ServiceConfig
和ReferenceConfig
API调用,则不是必需的。
or
,然后改为mina.jar或grizzly.jar。如果
,不是必需的。需要时,需要手动将这些依赖项添加到项目中。
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
---|---|---|---|---|---|
并发控制 | 经测试 | 并发控制 | 在审判中 | ||
连接控制 | 经测试 | 连接数控制 | 在审判中 | ||
直接连接某个提供商 | 经测试 | 用于直接点对点连接的提供商服务,用于测试 | 可以在测试环境中使用 | 阿里巴巴 | |
分组聚合 | 经测试 | 返回分组聚合的线索,菜单聚合服务和其他服务 | 用于特殊场景 | 可以在生产环境中使用 | |
参数验证器 | 经测试 | 参数验证器,JSR303验证框架集成 | 对性能产生影响 | 在审判中 | 来旺 |
结果缓存 | 经测试 | 结果缓存,用于加速请求 | 在审判中 | ||
通用参考 | 稳定 | 通用引用,没有业务接口类的远程调用,用于测试平台,打开api代理服务等 | 可以在生产环境中使用 | 阿里巴巴 | |
通用服务 | 稳定 | 对于模拟paltform,通用服务,实现任何接口都不需要接口类 | 可以在生产环境中使用 | 阿里巴巴 | |
回声测试 | 经测试 | 回声测试 | 在审判中 | ||
附件 | 稳定 | 附件 | 可以在生产环境中使用 | ||
异步调用 | 经测试 | 不可用的异步调用 | 在审判中 | ||
本地电话 | 经测试 | 本地电话 | 在审判中 | ||
回调参数 | 经测试 | 回调参数 | 用于特殊场景 | 在审判中 | 注册处 |
事件通知 | 经测试 | 事件通知,执行远程调用之前和之后的触发 | 在审判中 | ||
本地存根 | 稳定 | 在客户端执行部分逻辑 | 可以在生产环境中使用 | 阿里巴巴 | |
本地模拟 | 稳定 | 伪造的返回结果,可以在发生故障或直接执行时执行,以降低服务质量 | 需要支持注册 | 可以在生产环境中使用 | 阿里巴巴 |
延迟发布 | 稳定 | 延迟发布,用于等待应用程序加载预热数据,或等待弹簧上下文完全加载 | 可以在生产环境中使用 | 阿里巴巴 | |
懒惰连接 | 经测试 | 设置调用时延迟建立连接 | 在审判中 | 注册处 | |
粘性连接 | 经测试 | 粘性连接始终向同一提供者服务发出请求,除非服务已关闭,然后切换到另一个 | 在审判中 | 注册处 | |
令牌授权 | 经测试 | 令牌授权,用于服务授权 | 需要支持注册 | 在审判中 | |
路由规则 | 经测试 | 动态确定呼叫关系 | 需要支持注册 | 在审判中 | |
配置规则 | 经测试 | 动态分配配置,是业务逻辑的切换 | 需要支持注册 | 在审判中 | |
ACCESSLOG | 经测试 | Accesslog,用于记录呼叫信息 | 本地存储,影响性能,受磁盘大小限制 | 在审判中 | |
分布式事务 | 研究 | JTA / XA三阶段提交交易(TCC) | 不稳定 | 不可用 |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
---|---|---|---|---|---|
Zookeeper注册表 | 稳定 | 支持集群,有各种相关的开源产品,建议使用dubbo-2.3.3及以上版本 | 依赖于动物园管理员的稳定性 | 可以在生产环境中使用 | |
Redis注册表 | 稳定 | 支持基于客户端的高性能双写聚类方法 | 请确保服务器时间同步,用于检查心跳的过期脏数据 | 可以在生产环境中使用 | |
多播注册表 | 经测试 | 分散,无需安装注册表 | 根据网络拓扑和路由,服务器机房存在风险 | 可用于小范围,开发/测试环境中 | |
简单的注册表 | 经测试 | Dogfooding,注册表本身也是标准的RPC服务 | 没有集群支持,可能会发生单点故障 | 在审判中 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
简单的监控系统 | 稳定 | 支持JFreeChart统计报告 | 没有集群支持,可能会发生单点故障,但失败不会影响RPC调用 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
达博协议 | 稳定 | 使用NIO重用单个长连接并使用线程池同时处理请求,减少握手并提高并发效率,良好性能 | 单个连接将成为传输大文件的瓶颈 | 可以在生产环境中使用 | 阿里巴巴 |
Rmi协议 | 稳定 | 可与基于TCP协议的本机RMI互操作 | 有时连接失败,需要重建存根 | 可以在生产环境中使用 | 阿里巴巴 |
Hessian协议 | 稳定 | 可与基于HTTP协议的本机Hessian互操作 | 需要Hessian.jar支持,HTTP短连接的开销很大 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
Netty Transporter | 稳定 | JBoss的NIO框架,具有良好的性能 | 请求发送两个事件,需要屏蔽无用事件 | 可以在生产环境中使用 | 阿里巴巴 |
米娜运输车 | 稳定 | 经典的NIO框架,稳定 | 发送消息队列是不及时的,在很大的压力下,会有FullGC | 可以在生产环境中使用 | 阿里巴巴 |
灰熊运输车 | 经测试 | Sun的NIO框架,应用于GlassFish容器中 | 线程池不可扩展,Filter不能拦截下一个过滤器 | 在审判中 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
Hessian序列化 | 稳定 | 良好的性能,多语言支持(推荐) | 各种版本的Hessian的兼容性不好,可能与应用程序中使用的Hessian冲突,而Dubbo嵌入了hessian3.2.1的源代码 | 可以在生产环境中使用 | 阿里巴巴 |
Dubbo序列化 | 经测试 | 通过不传输POJO的类信息,在大量POJO传输中性能更好。 | 将字段添加到参数对象时,需要外部文件声明 | 在审判中 | |
Json序列化 | 经测试 | 纯文本,可以跨语言解析,默认使用FastJson | 表现不佳 | 在审判中 | |
Java序列化 | 稳定 | Java原生支持 | 表现不佳 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
Javassist ProxyFactory | 稳定 | 字节代代替反射,性能良好(推荐) | 根据javassist.jar并占用JVM的Perm内存,Perm可能必须更大:java -XX:PermSize = 128m | 可以在生产环境中使用 | 阿里巴巴 |
Jdk ProxyFactory | 稳定 | JDK原生支持 | 表现不佳 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
故障转移群集 | 稳定 | 发生故障时,故障会自动切换,重试其他服务器,通常用于读取操作。(推荐) | 重试将导致更长的延迟 | 可以在生产环境中使用 | 阿里巴巴 |
Failfast群集 | 稳定 | 快速失败,只有一次调用,无法立即报告,通常用于非幂等写入。 | 如果正在重新启动服务器,则可能会发生呼叫失败 | 可以在生产环境中使用 | 阿里巴巴 |
故障安全集群 | 稳定 | 故障安全,异常时,直接忽略,通常用于写入审计日志和其他操作 | 呼叫信息丢失 | 可以在生产环境中使用 | 监控 |
故障回复群集 | 经测试 | 失败自动恢复,后台记录失败请求,定期重传,通常用于消息通知操作 | 不可靠,重启服务器时丢失 | 可以在生产环境中使用 | 注册处 |
分叉集群 | 经测试 | 只要返回一个成功,通常用于高实时读取操作,就会并行调用多个服务器。 | 需要浪费更多的服务资源 | 可以在生产环境中使用 | |
广播集群 | 经测试 | 广播逐个调用所有提供程序,并且错误地报告任何错误,通常用于更新提供程序的本地状态 | 速度很慢,任何错误报告都是错误的。 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
随机负载平衡 | 稳定 | 随机概率,根据权重设置随机概率(推荐) | 横截面碰撞的概率很高。重试时,可能存在不等的瞬时压力。 | 可以在生产环境中使用 | 阿里巴巴 |
RoundRobin LoadBalance | 稳定 | Round Robin,根据公约后的重量设定车轮比率 | 存在缓慢的机器累积请求问题,并且极端情况可能导致雪崩 | 可以在生产环境中使用 | |
LeastActive LoadBalance | 稳定 | 最不活跃的呼叫号码,相同活动号码的随机数,活动号码是呼叫前后的计数差异,使慢速机器接收的请求减少。 | 在容量规划中,不要支撑重量,不要按重量容量对机器定向压力测量施加压力 | 可以在生产环境中使用 | |
ConsistentHash LoadBalance | 稳定 | 一致性哈希,相同的参数总是向同一个提供者请求,当一个提供者挂起,最初发送到提供者的请求时,基于虚拟节点,传播给其他提供者,不会引起剧烈的变化 | 压力分布不均匀 | 可以在生产环境中使用 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
条件路由规则 | 稳定 | 基于条件表达式的路由规则,简单易用 | 存在一些复杂的多分支条件,并且难以描述规则 | 可以在生产环境中使用 | 阿里巴巴 |
脚本路由规则 | 经测试 | 基于脚本引擎的路由规则,功能强大 | 没有沙盒正在运行,脚本功能太强大,可能是后门 | 在审判中 | |
特征 | 到期 | 强度 | 问题 | 劝告 | 用户 |
弹簧容器 | 稳定 | 自动加载META-INF / spring目录下的所有Spring配置 | 可以在生产环境中使用 | 阿里巴巴 | |
码头集装箱 | 稳定 | 启动嵌入式Jetty以报告状态 | 访问大量页面时,服务器的线程和内存会受到影响 | 可以在生产环境中使用 | 阿里巴巴 |
Log4j容器 | 稳定 | 自动配置log4j的配置,在多个进程启动时按进程自动对日志文件进行子对象 | 用户无法控制log4j的配置,不灵活 | 可以在生产环境中使用 | 阿里巴巴 |
关于XML配置项,请参阅:XML参考。如果您更喜欢直接使用API而不是使用Spring,请参阅API配置。想要了解如何使用配置的示例,请参阅快速入门。
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:dubbo="http://dubbo.apache.org/schema/dubbo"
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:application name="hello-world-app" />
<dubbo:registry address="multicast://224.5.6.7:1234" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" />
<dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" />
beans>
所有标签都支持自定义参数,因此我们可以满足不同扩展点的特殊配置要求,例如:
<dubbo:protocol name="jms">
<dubbo:parameter key="queue" value="your_queue" />
dubbo:protocol>
要么:
<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>
标签 | 目的 | 介绍 |
---|---|---|
|
服务出口 | 用于导出服务,定义服务元数据,使用多个协议导出服务,向多个注册表注册服务 |
|
服务参考 | 用于创建远程代理,订阅多个注册表 |
|
协议配置 | 在供应商方面配置服务协议,消费者方面如下。 |
|
应用程序配置 | 适用于提供者和消费者。 |
|
模块配置 | 可选的。 |
|
注册中心 | 注册表信息:地址,协议等 |
|
监控中心 | 监控信息:地址,地址等。可选。 |
|
提供商的默认配置 | ServiceConfigs的默认配置。可选的。 |
|
消费者的默认配置 | ReferenceConfigs的默认配置。可选的。 |
|
方法级别配置 | ServiceConfig和ReferenceConfig的方法级别配置。 |
|
参数配置 | 用于指定方法参数配置。 |
以超时为例,这里是优先级,从高到低(重试,负载均衡,活动也应用相同的规则):
提供者端的配置通过URL以URL的形式传递给消费者端。
建议提供程序为每个服务设置超时,因为提供程序确切地知道方法需要执行多长时间。如果消费者同时引用多个服务,则无需关心每个服务的超时设置。
从理论上讲,ReferenceConfig中支持的几乎所有配置项都可以使用ConsumerConfig,ServiceConfig,ProviderConfig配置默认值。
1:需要spring 3.2.16+
,详见公告:xmlns:p="http://www.springframework.org/schema/p"
2:默认情况下,引用bean遵循lazy init,只有当它被其他bean或其他实例引用时尝试使用getBean()
方法获取其实例时才会初始化引用。如果您需要eager init,请按以下方式配置:
如果您的应用程序足够简单,比如说,您不需要多注册表或多协议,并且您希望在Spring容器之间共享配置。您可以使用dubbo.properties
默认配置。
Dubbo会自动在classpath的根目录下加载dubbo.properties,你也可以使用JVM参数指定加载这个文件的路径:-Ddubbo.properties.file=xxx.properties
。
合并XML标记的标记名称和属性名称,用于.
拆分。每行一个属性。
dubbo.application.name=foo
等于
dubbo.registry.address=10.20.153.10:9090
等于
如果XML配置中有多个标记,则可以使用该id
值进行区分。如果您未指定ID,则ti将应用于所有标记。
dubbo.protocol.rmi.port=1234
等于
dubbo.registry.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中的属性。
属性(默认值)仅在未使用XML或JVM配置时才有效。
1:如果类路径下有多个dubbo.properties,比如两个jar分别包含dubbo.properties,Dubbo将仲裁地选择一个来加载,并记录错误信息。
2:如果id
未配置protocol
,将使用name
属性作为默认值
所有API属性都具有XML中的对应项,有关详细信息,请参阅XML参考。例如ApplicationConfig.setName("xxx")
等于
[1]
import com.alibaba.dubbo.rpc.config.ApplicationConfig;
import com.alibaba.dubbo.rpc.config.RegistryConfig;
import com.alibaba.dubbo.rpc.config.ProviderConfig;
import com.alibaba.dubbo.rpc.config.ServiceConfig;
import com.xxx.XxxService;
import com.xxx.XxxServiceImpl;
// Implementation
XxxService xxxService = new XxxServiceImpl();
// Application Info
ApplicationConfig application = new ApplicationConfig();
application.setName("xxx");
// Registry Info
RegistryConfig registry = new RegistryConfig();
registry.setAddress("10.20.130.230:9090");
registry.setUsername("aaa");
registry.setPassword("bbb");
// Protocol
ProtocolConfig protocol = new ProtocolConfig();
protocol.setName("dubbo");
protocol.setPort(12345);
protocol.setThreads(200);
// NOTES: ServiceConfig holds the serversocket instance and keeps connections to registry, please cache it for performance.
// Exporting
ServiceConfig service = new ServiceConfig(); // In case of memory leak, please cache.
service.setApplication(application);
service.setRegistry(registry); // Use setRegistries() for multi-registry case
service.setProtocol(protocol); // Use setProtocols() for multi-protocol case
service.setInterface(XxxService.class);
service.setRef(xxxService);
service.setVersion("1.0.0");
// Local export and register
service.export();
import com.alibaba.dubbo.rpc.config.ApplicationConfig;
import com.alibaba.dubbo.rpc.config.RegistryConfig;
import com.alibaba.dubbo.rpc.config.ConsumerConfig;
import com.alibaba.dubbo.rpc.config.ReferenceConfig;
import com.xxx.XxxService;
// Application Info
ApplicationConfig application = new ApplicationConfig();
application.setName("yyy");
// Registry Info
RegistryConfig registry = new RegistryConfig();
registry.setAddress("10.20.130.230:9090");
registry.setUsername("aaa");
registry.setPassword("bbb");
// NOTES: ReferenceConfig holds the connections to registry and providers, please cache it for performance.
// Refer remote service
ReferenceConfig reference = new ReferenceConfig(); // In case of memory leak, please cache.
reference.setApplication(application);
reference.setRegistry(registry);
reference.setInterface(XxxService.class);
reference.setVersion("1.0.0");
// Use xxxService just like a local bean
XxxService xxxService = reference.get(); // NOTES: Please cache this proxy instance.
只关心差异:
...
// Method level config
List methods = new ArrayList();
MethodConfig method = new MethodConfig();
method.setName("createXxx");
method.setTimeout(10000);
method.setRetries(0);
methods.add(method);
// Referring
ReferenceConfig reference = new ReferenceConfig();
...
reference.setMethods(methods);
...
...
ReferenceConfig reference = new ReferenceConfig();
// If you know the address of the provider and want to bypass the registry, use `reference.setUrl()` to specify the provider directly. Refer [How to Invoke a specific provider](../demos/explicit-target.md) for details.
reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");
...
我们什么时候应该使用API:API对于与OpenAPI,ESB,Test,Mock等系统集成非常有用。通用提供商和消费者,我们仍然建议使用XML配置。↩︎
要求2.5.7
或更高
Service
导出注释import com.alibaba.dubbo.config.annotation.Service;
@Service(timeout = 5000)
public class AnnotateServiceImpl implements AnnotateService {
// ...
}
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("provider-test");
return applicationConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
registryConfig.setClient("curator");
return registryConfig;
}
}
@SpringBootApplication
@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")
public class ProviderTestApp {
// ...
}
Reference
注释供参考public class AnnotationConsumeService {
@com.alibaba.dubbo.config.annotation.Reference
public AnnotateService annotateService;
// ...
}
@Configuration
public class DubboConfiguration {
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("consumer-test");
return applicationConfig;
}
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
return consumerConfig;
}
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
registryConfig.setClient("curator");
return registryConfig;
}
}
@SpringBootApplication
@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service")
public class ConsumerTestApp {
// ...
}
2.5.7中的所有注释将在以后删除,如果您在项目中使用了这些注释,请升级到最新版本。
<dubbo:annotation package="com.alibaba.dubbo.test.service" />
默认情况下,dubbo将检查从属服务在启动时是否可用。当它不可用时,它会抛出异常以防止Spring完成初始化,这样你就可以在发布应用程序之前尽早发现问题,默认设置:check=true
。
你可以关闭检查check=false
。例如,某些服务在您运行测试时并不关心它,或者您必须首先因为循环依赖而启动它。
此外,如果您的Spring bean是延迟加载的,或者您使用API编程延迟参考服务,请关闭检查,否则服务将在服务暂时不可用时抛出异常,然后获取空引用。如果配置check=false
,您可以获得参考。恢复服务后,服务可以自动重新连接。
禁用服务的启动检查(在未提供提供程序时抛出一些异常/错误):
<dubbo:reference interface = "com.foo.BarService" check = "false" />
禁用所有服务的启动检查(未提供时抛出一些异常/错误):
<dubbo:consumer check = "false" />
禁用注册中心启动检查(注册订阅失败错误):
<dubbo:registry check="false" />
dubbo.reference.com.foo.BarService.check = false
dubbo.reference.check = false
dubbo.consumer.check = false
dubbo.registry.check = false
java -Ddubbo.reference.com.foo.BarService.check = false
java -Ddubbo.reference.check = false
java -Ddubbo.consumer.check = false
java -Ddubbo.registry.check = false
dubbo.reference.check=false
,强制更改所有引用的检查值,即使配置有声明,也会被覆盖。
dubbo.consumer.check=false
默认值为check
。如果配置中有明确的声明,例如
dubbo.registry.check=false
,上面的两个配置是表示订阅的成功。如果在提供程序列表为空的注册失败时也允许启动订阅,则需要使用此配置。系统将定期在后台再次尝试。
本文转自Ddbbo官方:http://dubbo.apache.org/en-us/docs/dev/build.html