可配置参数

http://dubbo.apache.org/zh-cn/docs/user/references/xml/introduction.html

与 spring 整合的几种方式

SpringBoot 与 dubbo 整合的三种方式:

http://dubbo.apache.org/zh-cn/docs/user/configuration/annotation.html
1)、导入 dubbo-starter,在 application.properties 中配置属性
使用 @Service【暴露服务】使用 @Reference【引用服务】使用 @EnableDubbo【开启扫描,相当于配置 dubbo.scan.base-packages】 http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
2)、导入 dubbo-starter,保留 dubbo xml 配置文件(这样可保留方法级别的配置)
在启动类上使用 @ImportResource(locations="classpath:dubbo.xml") 导入 dubbo 的配置文件即可 http://dubbo.apache.org/zh-cn/docs/user/configuration/api.html
3)、使用注解 API 的方式,将每一个组件手动创建到容器中,让 dubbo 来扫描其他的组件

API 方式配置例子,使用 @Service【暴露服务】使用 @Reference【引用服务】使用【@EnableDubbo】配置 Dubbo 扫描,开启基于注解的 dubbo 功能

package com.gmall.config;

import java.util.ArrayList;
import java.util.List; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ProviderConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.gmall.service.UserService; @EnableDubbo(scanBasePackages="com.gmall")
@Configuration
public class MyDubboConfig { @Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("boot-user-service-provider");
return applicationConfig;
} //<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
} //<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20882);
return protocolConfig;
} /**
<dubbo:service interface="com.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"/>
</dubbo:service>
*/
@Bean
public ServiceConfig<UserService> userServiceConfig(UserService userService){
ServiceConfig<UserService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(UserService.class);
serviceConfig.setRef(userService);
serviceConfig.setVersion("1.0.0"); //配置每一个method的信息
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("getUserAddressList");
methodConfig.setTimeout(1000); //将method的设置关联到service配置中
List<MethodConfig> methods = new ArrayList<>();
methods.add(methodConfig);
serviceConfig.setMethods(methods); //ProviderConfig
//MonitorConfig return serviceConfig;
}
}

配置优先级

http://dubbo.apache.org/zh-cn/docs/user/configuration/configuration-load-process.html

JVM参数配置 > 外部化配置 > 代码配置 > 配置文件((dubbo.xml || application.properties) >  (dubbo.properties 通常写公共属性配置))

启动时检查

http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

Dubbo 默认会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成。

<!--关闭某个服务的启动时检查 (没有提供者时报错)-->
<dubbo:reference interface="com.foo.BarService" check="false"/>
<!--关闭所有服务的启动时检查 (没有提供者时报错)-->
<dubbo:consumer check="false"/>
<!--关闭注册中心启动时检查 (注册订阅失败时报错)-->
<dubbo:registry check="false"/>

超时设置(timeout),默认为一秒(1000ms)

消费者与提供者之间方法调用的时间,超过则会抛出异常,提供者与消费者都可配置,具体生效依据不同粒度配置的覆盖关系,消费方默认超时时间取自提供方。

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

http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-reference.html

<!--
1)、精确优先 (方法级优先,接口级次之,全局配置再次之)
2)、消费者设置优先(如果级别一样,则消费方优先,提供方次之)
--> <!--提供方设置-->
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" timeout="1000"/> <!--提供方设置,精确到方法-->
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService">
<dubbo:method name="sayHello" timeout="1000"/>
</dubbo:service> <!--所有提供方默认设置-->
<dubbo:provider timeout="1000"/>

不同粒度配置的覆盖关系

http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html

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

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。

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

重试次数(retries),默认为 2 ,不包含第一次调用,即一共会调用 3 次

消费方默认重试次数设置取自提供方,设置方式与超时设置类似。

http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html

<!-- retries="":重试次数,不包含第一次调用,0代表不重试
幂等操作(可设置重试次数)【如查询、删除、修改】,执行多少次产生的效果一样
非幂等操作(不能设置重试次数)【如新增】
如果该服务有多个,那么当前服务出错后,会重试其它机器上相同的服务,不会一直调用相同地址上的服务
--> <!--提供方设置,精确到方法-->
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService">
<dubbo:method name="sayHello" retries="3"/>
</dubbo:service>

多版本设置(灰度发布)

http://dubbo.apache.org/zh-cn/docs/user/demos/multi-versions.html

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

可以按照以下的步骤进行版本迁移:

  1. 在低压力时间段,先升级一半提供者为新版本
  2. 再将所有消费者升级为新版本
  3. 然后将剩下的一半提供者升级为新版本
<!--老版本服务提供者配置-->
<dubbo:service interface="com.foo.BarService" version="1.0.0" />
<!--新版本服务提供者配置-->
<dubbo:service interface="com.foo.BarService" version="2.0.0" /> <!--老版本服务消费者配置-->
<dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
<!--新版本服务消费者配置-->
<dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" /> <!--如果不需要区分版本,可以按照以下的方式配置-->
<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />

本地存根

http://dubbo.apache.org/zh-cn/docs/user/demos/local-stub.html

消费者在调用提供者之前可以做一些操作,来决定要不要调用提供者(就是为具体实现创建一个代理对象)

以之前的 HelloWord 为例,为 DemoService 创建本地存根(一般在接口项目中创建)

package org.apache.dubbo.demo;

public class DemoServiceStub implements DemoService {

    private final DemoService demoService;

    // 构造函数传入真正的远程代理对象
public DemoServiceStub(DemoService demoService){
this.demoService = demoService;
} @Override
public String sayHello(String name) {
// 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
try {
System.out.println("DemoServiceStub.....");
return demoService.sayHello(name);
} catch (Exception e) {
// 你可以容错,可以做任何AOP拦截事项
return "容错数据";
}
}
}

配置,消费方和提供方都可以配置,这里在消费方配置。

<dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" stub="org.apache.dubbo.demo.consumer.DemoServiceStub"/>

<!--或者-->
<dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" stub="true"/>

Dubbo Configuration的更多相关文章

  1. springboot+dubbo

    使用springboot搭建dubbo服务,首先封装出springboot-dubbo的项目,引入在服务上加直接@Service直接使用,方便于拆封统一管理. package hello.dubbo. ...

  2. 解决Dubbo 2.7.3版本使用ConfigCenterConfig集成Apollo No Provider found的问题

    Dubbo 2.7.3 集成Apollo 问题描述 Dubbo 2.7.3支持配置中心外部化配置, 因此只需要定义一个ConfigCenterConfig的Bean. @EnableDubbo(sca ...

  3. Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]

    dubbo的官方文档写的真好, http://dubbo.apache.org/zh-cn/docs/2.7/user/dependencies/ 在使用dubbo过程中的问题, 和解决 org.sp ...

  4. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  5. Dubbo 备注

    Dubbo是阿里开源的一款服务治理中间件,主要包含如下节点: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. ...

  6. Running Dubbo On Spring Boot

    Dubbo(http://dubbo.io/) 是阿里的开源的一款分布式服务框架.而Spring Boot则是Spring社区这两年致力于打造的简化Java配置的微服务框架. 利用他们各自优势,配置到 ...

  7. 基于Dubbo框架构建分布式服务(二)

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> ...

  8. Spring Boot整合Dubbo框架demo

    Dubbo框架原理见之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先启动zookeeper Server端 Pom配置如下 <?xml ...

  9. 第一章,阿里的Dubbo完美初级搭建,待续。。。

    1.1 后台工程搭建分析 Web工程. Maven的常见打包方式:jar.war.pom Pom工程一般都是父工程,管理jar包的版本.maven插件的版本.统一的依赖管理.聚合工程. Taotao- ...

随机推荐

  1. python之jupyter安装与使用

    Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown.用途包括:数据清理和转换,数值模拟,统计建模,机器学 ...

  2. python 3.8 新特性

    董伟明技术博客 安装 python 3.8 环境 , 在此刻 似乎 anaconda 都还不支持 3.8 ,所以直接下载源码进行编译安装 环境: centos7.5 版本:python3.8 1.依赖 ...

  3. maven中使用jetty插件

    <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...

  4. 04-spring框架—— Spring 集成 MyBatis

    将 MyBatis与 Spring 进行整合,主要解决的问题就是将 SqlSessionFactory 对象交由 Spring来管理.所以,该整合,只需要将 SqlSessionFactory 的对象 ...

  5. 01-spring框架——spring概述

    Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的.Spring 的核心是控制反转(IoC)和面向切面编程(AOP).Spring 是可以 ...

  6. War of the Corporations CodeForces - 625B (greed)

    A long time ago, in a galaxy far far away two giant IT-corporations Pineapple and Gogol continue the ...

  7. 【转】Java的四种代码块

    原贴地址:http://www.cnblogs.com/end/archive/2012/12/21/2827554.html 一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下 ...

  8. 多线程-生产者消费者(synchronized同步)

    正解博客:https://blog.csdn.net/u011863767/article/details/59731447 永远在循环(loop)里调用 wait 和 notify,不是在 If 语 ...

  9. linux ngxtop安装安装及使用

    写在前面: ngxtop是Nginx日志实时分析利器 1.下载 下载地址:https://github.com/lebinh/ngxtop  下载zip文件到本地 登录linux服务器,定位到安装目录 ...

  10. BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]

    一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量. 于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品, 类似于xo ...