dubbo 分析-调用过程分析

原创 2018年04月15日 11:19:20

dubbo 调用过程分析

本章 主要介绍 dubbo 服务和客户端 调用过程。

服务端 接收请求流程

服务端配置

直接采用dubbo 源码例子 dubbo-demo-provider

配置如下:

<!-- provider's application name, used for tracing dependency relationship -->
<dubbo:application name="demo-provider"/>

<!-- use multicast registry center to export service -->
<dubbo:registry address="multicast://224.5.6.7:1234"/>

<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880" server="netty4"/>

<!-- service implementation, as same as regular local bean -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/>

<!-- declare the service interface to be exported -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" timeout="10000"/>

采用netty4 协议。

服务处理请求流程

这里写图片描述

说明 :

其实客户端响应处理流程 和 服务端 请求处理流程差不多。 都是 dubboprotocol 的requestHandler 处理。

nettyServer 和nettyClient 创建会有一个 handler 的warp 过程

public NettyServer(URL url, ChannelHandler handler) throws RemotingException {
    super(url, ChannelHandlers.wrap(handler, ExecutorUtil.setThreadName(url, SERVER_THREAD_POOL_NAME)));
}  

 protected ChannelHandler wrapInternal(ChannelHandler handler, URL url) {
    return new MultiMessageHandler(new HeartbeatHandler(ExtensionLoader.getExtensionLoader(Dispatcher.class)
            .getAdaptiveExtension().dispatch(handler, url)));
}

Dispatcher 默认扩展 是 AllDispatcher。
public class AllDispatcher implements Dispatcher {

public static final String NAME = "all";

public ChannelHandler dispatch(ChannelHandler handler, URL url) {
    return new AllChannelHandler(handler, url);
}

}

AllChannelHandler 包含了 线程池处理请求.

遇到的错误:

dubbo 源码 example 服务端代码测试 更改为 netty4 协议 : Unsupported server type: netty4,

Exception in thread “main” com.alibaba.dubbo.rpc.RpcException: Unsupported server type: netty4,

检查发现 dubbo-demo-provider 的pom如下:

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-demo-api</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-config-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-registry-multicast</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-remoting-netty</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
        </dependency>
    </dependencies>

因为是分模块引入 所以默认不存在 netty4 代码:

添加如下 依赖解决问题:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo-remoting-netty4</artifactId>
    </dependency>
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/taotoxht/article/details/79947660

android java.io.IOException: open failed: EBUSY (Device or resource busy)

 今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOE...
  • u012437660
  • u012437660
  • 2015-12-09 10:15:57
  • 1113

网络数据请求展示为无限轮播图 ViewPager+XListView+Fragment+ImageLoader

一.  MainActivity.java package androidthree_1509d.MyViewpager; import android.support.v4.app.Fragm...
  • IT666DHW
  • IT666DHW
  • 2017-09-13 22:18:56
  • 232

Java知识点总结

Java研发工程师知识点总结 大纲  一、Java基础(语言、集合框架、OOP、设计模式等) 二、Java高级(JavaEE、框架、服务器、工具等) 三、多线程和并发 四、...
  • sinat_34979383
  • sinat_34979383
  • 2017-03-08 16:06:14
  • 2021

pl/sql编程(二)

第一点要理解以下四点: DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert、delete、update DCL:数据库控制语言 ,关键字:grant、rem...
  • luman1991
  • luman1991
  • 2016-08-24 21:57:24
  • 7057

java.io.IOException: Server returned HTTP response code: 400 for URL解决方法

错误:java.io.IOException: Server returned HTTP response code: 400 for URL 在使用JAVA发起http请求的时候,经常会遇到这个错...
  • u013531259
  • u013531259
  • 2014-01-21 17:44:42
  • 25605

利用Apache的POI包sax解析大数据量的Excel2007版本以上数据(Java实现,完全解析excel思路)

首先说明,本文章引用了apache官网上的代码,本文章只细讲解利用POI包SAX解析版本为excel2007以上版本的数据。 我们知道excel2007以上版本采用xml存储格式,我们可以直接修改一个...
  • qq413379222
  • qq413379222
  • 2015-09-29 21:17:07
  • 11619

Struts2+Spring3+MyBatis3整合以及Spring注解开发

最近在做一个SpringMVC+Spring+MyBatis的项目,突然想起以前自己要p
  • levelmini
  • levelmini
  • 2014-10-31 09:38:01
  • 3259

OSGI学习笔记一(事件传递)

一、定义在jujianzh传递事件的类
  • waterbbx
  • waterbbx
  • 2014-11-07 18:35:08
  • 9639

Python3网络爬虫快速入门实战解析

Python3网络爬虫快速入门实战解析 标签: python网络爬虫 2017-09-28 14:48 6266人阅读 评论(34) 收藏 举报 ...
  • java_2017_csdn
  • java_2017_csdn
  • 2018-01-22 17:21:17
  • 109
收藏助手
不良信息举报
您举报文章:dubbo 分析-调用过程分析
举报原因:
原因补充:

(最多只允许输入30个字)