Dubbo学习总结 - 无码

Dubbo总体的使用和源码分析,都在git上有体现,参考git:https://github.com/apache/incubator-dubbo

本文主要是针对看过知识点,做下总结记录。

Dubbo是SOA服务治理,

简单的说就是对各个接口方法做管理,比如监查,控制等操作。

这些操作不止是API接口,还可以页面配置。

页面配置可以看git:http://dubbo.apache.org/books/dubbo-admin-book/ops/dubbo-ops.html

API(主要是xml参数的配置)可以参考http://dubbo.apache.org/books/dubbo-user-book/demos/thread-model.html

总结下Dubbo的缺点,个人觉得比较明显的地方,列举了出来

a、服务提供方与调用方接口依赖方式太强:调用方对提供方的抽象接口存在强依赖关系,需要严格的管理版本依赖,才不会出现服务方与调用方的不一致导致应用无法编译成功等一系列问题;

 b、服务对平台敏感,难以简单复用:通常我们在提供对外服务时,都会以REST的方式提供出去,这样可以实现跨平台的特点。

Dubbo快速上手使用示例

1. 抽出公共接口

  可以建立个小工程,写个接口,打个小jar包,放到生产者和消费者中

2. 建立生产者

  做两件事:建立producer的xml,和启动producer

3. 建立消费者

  也是做两件事:建立consumer的xml,和启动consumer

CODE:

可以见官网文档:http://dubbo.apache.org/books/dubbo-user-book/quick-start.html

示例:

producer.xml

consumer.xml

两个角色找服务是根据com.alibaba.dubbo.examples.merge.api.MergeService类全路径找的,与application name之类的属性无关

Dubbo开发实现,主要参见http://dubbo.apache.org/books/dubbo-user-book/demos/fault-tolerent-strategy.html

1. 启动时检查

    默认就可以(true)

   

2. 集群容错

    这里提到了Invoker了,白话讲就是对服务的抽象代理。

    分为多种模式(快速失败,失败重试之类的),有不同的介绍

   

3. 负载均衡

    调用机制。针对的是producer和consumer,可以精确Service(类)和方法

4. 线程模型

    针对producer的线程池(不同类型),原理与jdk中的线程池一样

5. 直连提供者

    线上开发没有用。简单说就是Unit Test,绕过zk,测试接口服务。

6. 只订阅

7. 只注册

    个人情况而言,这两个在线上对我用处不大

8. 静态服务

    代码控制producer的启用禁用

9. 多协议

    主要就是可以 长、短连接、http之类的配置

10. 多注册中心

    producer和consumer 可以使用多个注册组件服务

11. 服务分组

    当一个接口有多种实现时,可以用 group 区分。

    简单说就是 consumer调用不同的producer ServiceImpl

12. 多版本

    就是根据不同的pom值,取不同的接口、ServiceImpl

13. 分组聚合

    就是从不同producer的ServiceImpl中,分别取结果

14. 参数验证

    拦截器,注解形势,验证参数的规则(非空,长短...)

15. 结果缓存

    consumer端缓存结果数据

16. 

另外开发拓展参考http://dubbo.apache.org/books/dubbo-dev-book/

======================

Dubbo用到的相关技术简单讲解

Hessian的使用

CODE

web.xml

-

-     helloService

-     com.caucho.hessian.server.HessianServlet

-     

-         service-class

-         com.test.hessian.impl.BaseServiceImpl

-     

-

-

-

-     helloService

-     /helloService

-

 - service

public interface BasicAPI {

public String hello();

}

public class BasicServiceImpl extends HessianServlet implements BasicAPI {

private String _greeting = "Hello, world";

public void setGreeting(String greeting)

{

_greeting = greeting;

}

public String hello()

{

return _greeting;

}

}

 - client

String url = "http://localhost/helloService";

HessianProxyFactory factory = new HessianProxyFactory();

BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);

System.out.println("hello(): " + basic.hello());

Hessian总结

Binary-RPC 是一种和 RMI 类似的远程调用的协议,它和 RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

来看下 Binary -RPC 协议的一次远程通信过程:

1 、客户端发起请求,按照 Binary -RPC 协议将请求信息进行填充;

2 、填充完毕后将二进制格式文件转化为流,通过传输协议进行传输;

3 、接收到在接收到流后转换为二进制格式文件,按照 Binary -RPC 协议获取请求的信息并进行处理;

4 、处理完毕后将结果按照 Binary -RPC 协议写入二进制格式文件中并返回。

=========

Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library 。

1 、是基于什么协议实现的?

基于 Binary-RPC 协议实现。

2 、怎么发起请求?

需通过 Hessian 本身提供的 API 来发起请求。

3 、怎么将请求转化为符合协议的格式的?

Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

4 、使用什么传输协议传输?

Hessian 基于 Http 协议进行传输。

5 、响应端基于什么机制来接收请求?

响应端根据 Hessian 提供的 API 来接收请求。

6 、怎么将流还原为传输格式的?

Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

7 、处理完毕后怎么回应?

             处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。

你可能感兴趣的:(Dubbo学习总结 - 无码)