Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现consumer 调用 provider的方法;
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发
现。
Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo
服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。
1、服务提供方开发
开发步骤:
(1)创建maven工程(打包方式为war)在pom.xml文件中导入相应的坐标
(2)配置对应的web.xml文件
注意 consumer 和 provider 的端口配置;
Dubbo相关配置说明
1.包扫描 (推荐使用)
<dubbo:annotation package=“com.lxs.service” />
2、协议
<dubbo:protocol name=“dubbo” port=“20880”/>
一般在服务提供者(provider)一方配置,可以指定使用的协议名称和端口号。
其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。
推荐使用的是dubbo协议。
dubbo 协议采用单一长连接和 NIO 异步通讯,适合于小数据量,大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低
3.负载均衡
负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任 务。
在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性 Hash),缺省为random随机调用。
配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置。
4.解决Dubbo无法发布被事务代理的Service问题
我们如果在服务提供者类上加入@Transactional事务控制注解后,服务就发布不成功了!
原因:事务控制的底层原理是为服务提供者(provider)类创建代理对象,而默认情况下Spring是基于JDK动态代理方式创建代理对象,而此代理对象的完整类名为com.sun.proxy.$Proxy42(最后两位数字不是固定的),导致 Dubbo在发布服务前进行包匹配时无法完成匹配,进而没有进行服务的发布。
方法:1.修改provider(提供方)的 web.xml配置文件;使用Cglib进行代理
<tx:annotation-driven transaction-manager=“transactionManager” proxy-target-
class=“true”/>
2.修改provider(提供方)的 service的实现类
@Service(interfaceClass = HelloService.class)