Dubbo相关配置
1:包扫描(dubbo注解配置)
<!--【注意】约束头文件用的是appache的dubbo的约束-->
<dubbo:annotation package="包名" />
服务提供者和服务消费者前面章节实现都是基于配置文件进行服务注册与订阅,如果使用包扫描,可以使用注解方式实现
- @Service注解,会调用dubbo去zookeeper上注册服务。在接口的实现类上使用注解
- @Reference,会调用dubbo去zookeeper上订阅相应的接口服务,在controller的私有属性上使用注解
2、 服务接口访问协议
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
一般在服务提供者一方配置,可以指定使用的协议名称和端口号。
其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。
默认使用的是dubbo协议,默认端口号:20880。
dubbo 协议采用单一长连接和 NIO 异步通讯,适合于小数据量、大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
也可以在同一个工程中配置多个协议,不同服务可以使用不同的协议, 在spring-provider.xml配置文件中添加:
<!-- 多协议配置 -->
<dubbo:protocol name="dubbo" port="20881" />
<dubbo:protocol name="rmi" port="1099" />
Dubbo各种协议详解
dubbo协议:
- 连接个数:单连接
- 连接方式:长连接
- 传输协议:TCP
- 传输方式:NIO异步传输
- 序列化:Hessian二进制序列化
- 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
- 适用场景:常规远程服务方法调用
rmi协议:
- 连接个数:多连接
- 连接方式:短连接
- 传输协议:TCP
- 传输方式:同步传输
- 序列化:Java标准二进制序列化
- 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
- 适用场景:常规远程服务方法调用,与原生RMI服务互操作
3、启动时检查
//retries 失败时的重试次数 2,一共调用3次
<dubbo:consumer check="false" retries="2"/>
上面这个配置需要配置在服务消费者一方,如果不配置默认check值为true。Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题。可以通过将check值改为false来关闭检查。
4、超时调用
默认的情况下,dubbo调用的时间为一秒钟,如果超过一秒钟就会报错,所以我们可以设置超时时间长些,保证调用不出问题,这个时间需要根据业务来进行确定。
(1)修改消费者 配置文件,增加如下配置:
<!--超时时间为10秒钟-->
<dubbo:consumer timeout="10000"></dubbo:consumer>
(2)修改提供者配置文件,增加如下配置
<!--超时时间设置为10秒钟-->
<dubbo:provider timeout="10000"></dubbo:provider>
5、负载均衡
负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任务。
在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机random、轮询roundrobin、最少活跃调用数leastactive, 一致性哈希consistent hash),缺省【默认】为random随机调用。
配置负载均衡策略,既可以在服务提供者一方配置(@Service(loadbalance = “roundrobin”)),也可以在服务消费者一方配置(@Reference(loadbalance = “roundrobin”)),两者取一
- 如下在服务消费者指定负载均衡策略,可在@Reference添加@Reference(loadbalance = “roundrobin”)
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "roundrobin")
private UserSerivce userService;
6、version 调用指定的提供者
服务版本,建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级
Dubbo配置中心
数据发布/订阅即所谓的配置中心:发布者将数据发布到ZooKeeper一系列节点上面,订阅者进行数据订阅,当数据有变化时,可以及时得到数据的变化通知,达到动态及时获取数据的目的。
PropertyPlaceholderConfigurer 用法超详细解析!
PropertyPlaceholderConfigurer
源自JavaDoc: PropertyPlaceholderConfigurer 是 PlaceholderConfigurerSupport 的一个子类,用来解析${…}
占位符的,可以使用setLocation
和setProperties
设置系统属性和环境变量。从Spring3.1 开始,PropertySourcesPlaceholderConfigurer应优先与此实现,通过使用Spring3.1 中的 Environment和 PropertySource机制, 使它的灵活性更强。但是PropertyPlaceholderConfigurer却适用如下情况:当 spring-context
模块不可用的时候,使用BeanFactory的API 而不是ApplicationContext的API。现有配置使用setSystemPropertiesMode 和 setSystemPropertiesModeName属性,建议用户不要使用这些设置, 而是使用容器的Environment属性;