作者引言

很高兴啊,我们来到了IceRPC之调度管道->快乐的RPC, 基础引导,有点小压力,打好基础,才能让自已不在迷茫,快乐的畅游世界。

调度管道 Dispatch pipeline

了解如何接受请求并返回响应。

定义

接受/完成请求,并返回响应的过程称为调度

调度通常由服务器连接创建: 服务器连接,接收请求并返回响应。

然而,由于客户端和服务器连接具有相同的功能,因此客户端连接,也可以调度请求。

调度抽象

当连接接收到请求时,它会使用其配置的调度程序,调度此请求。该调度程序是接受传入请求,并返回传出响应的抽象。它是调用者invoker抽象服务器端的对应部分。

InvokerDispatcher 之间的一个重要区别,是需要实现 Dispatcher 抽象来满足请求并生成响应。Invoker 抽象由 IceRPC 的连接实现。

C# 中, 这个调度器抽象是 IDispatcher 接口:

namespace IceRpc;

public interface IDispatcher
{
ValueTask<OutgoingResponse> DispatchAsync(
IncomingRequest request,
CancellationToken cancellationToken = default);
}

当构建接受此连接的服务器时,会配置服务器连接的调度程序。该调度程序不能为空。服务器与其接受的所有连接,共享其调度程序。例如:

// configures server to use a new Chatbot instance as its dispatcher
await using var server = new Server(new Chatbot());

为客户端连接,配置调度程序是可选的,因为客户端连接,可以不接受请求。

C# 中,将客户端连接的调度程序配置为 ConnectionOptions 类。例如:

using IceRpc;

// ClientConnectionOptions derives from ConnectionOptions
var clientConnectionOptions = new ClientConnectionOptions
{
Dispatcher = new MyCallback(),
ServerAddress = new Uri("icerpc://hello.zeroc.com")
}; await using var connection = new ClientConnection(clientConnectionOptions);

处理调度Dispatcher

调度抽象提供了很大的灵活性。一个 Slice 服务是调度程序,因此很容易配置服务器,将其收到的所有请求,调度到同一个 Slice 服务。

调度器,实现可以调度到,另一个调度器,该调度器本身,调度到另一个调度器,等等;

在服务器上配置的调度程序,可以是调度程序链或树的头部,称为"调度管道"dispatch pipeline.

3种常见的调度类型:

  • Leaf dispatcher

    这是调度管道中的子叶。例如,Slice 服务。

  • Middleware

    中间件拦截调度,并将其转发到"下一个"next调度程序。IceRPC 提供了几个内置的中间件,用于日志记录,压缩等。

  • Router

    路由器根据请求的路径,将请求路由到,在该路由器注册的调度程序。还可以托管多一个中间件。

---
title: 一个简单的调度管道
---
flowchart LR
connection -- request --> middleware -- request --> service[Slice service]
service -- response --> middleware -- response --> connection

作者结语

  • 一直做,不停做,才能提升速度
  • 翻译的不好,请手下留情,谢谢
  • 如果对我有点小兴趣,如可加我哦,一起探讨人生,探讨道的世界
  • 觉得还不错的话,点个

IceRPC之调度管道->快乐的RPC的更多相关文章

  1. rabbitmq系列五 之远程过程调用(RPC)

    1.远程过程调用(RPC) 在第二篇教程中我们介绍了如何使用工作队列(work queue)在多个工作者(woker)中间分发耗时的任务. 可是如果我们需要将一个函数运行在远程计算机上并且等待从那儿获 ...

  2. [转]新兵训练营系列课程——平台RPC框架介绍

    原文:http://weibo.com/p/1001643875439147097368 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框 ...

  3. 《RabbitMQ Tutorial》译文 第 6 章 远程过程调用(RPC)

    原文来自 RabbitMQ 英文官网的教程(6.Remote procedure call - RPC),其示例代码采用了 .NET C# 语言. In the second tutorial we ...

  4. 远程过程调用(RPC)

    在第二篇教程中我们介绍了如何使用工作队列(work queue)在多个工作者(woker)中间分发耗时的任务. 可是如果我们需要将一个函数运行在远程计算机上并且等待从那儿获取结果时,该怎么办呢?这就是 ...

  5. hbase rpc这点事

    年前的时候系统梳理了一下hbase rpc的实现,并且对组里的小伙伴做了一次分享.趁着热乎劲还没完全消失殆尽,准备赶紧记录下来. hbase中rpc概况 作为一个分布式系统,hbase的设计是典型的m ...

  6. GO语言之channel

    前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

  7. RabbitMQ 实践及使用

    目录 - 1. RabbitMQ的安装    - 1.1 配置好 epel    - 1.2 安装 RPM包    - 1.3 创建用户设置权限- 2. RabbitMQ组件- 3. RabbitMQ ...

  8. 传统模式下WebService与WebAPI的相同与不同

    1.WebService是利用HTTP管道实现了RPC的一种规范形式,放弃了对HTTP原生特征与语义的完备支持:而WebAPI是要保留HTTP原生特征与语义的同时实现RPC,但WebAPI的实现风格可 ...

  9. 转载RabbitMQ入门(6)--远程调用

    远程过程调用(RPC) (使用Java客户端) 在指南的第二部分,我们学习了如何使用工作队列将耗时的任务分布到多个工作者中. 但是假如我们需要调用远端计算机的函数,等待结果呢?好吧,这又是另一个故事了 ...

  10. 基于nginx+xxl-job+springboot高可用分布式任务调度系统

    技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...

随机推荐

  1. mysql 重新整理——索引简介[七]

    前言 百度百科索引: 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单. ...

  2. C3P0反序列化链分析

    前言 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.使用它的开源项目有Hibernate.Spring等.之前有接触到过,但是没有深入了解 ...

  3. lin-view-ui Vue 2.0 组件库

    lin-view-ui 是一款基于 Vue.js 2.0 的前端 UI 组件库,主要集成了平时在开发中使用到的 UI 组件. 特性 基于 Vue 开发的 UI 组件 使用 npm + webpack ...

  4. ABP -Vnext框架一步一步入门落地教程——ABP Vnext框架代码安装和启动(一)

    兄弟们,人生需要指引,而复制是成功最快的方式,让我们开始行动吧 --codesoft 教程介绍 ABP-Vnext框架我们之前摸了无数次,好象初恋的女孩,一直在靠近,一直在努力,一直不敢盯着她的眼睛说 ...

  5. 红日安全vulnstack (一)

    网络拓扑图 靶机参考文章 CS/MSF派发shell 环境搭建 IP搭建教程 本机双网卡 65网段和83网段是自己本机电脑(虚拟机)中的网卡, 靶机外网的IP需要借助我们这两个网段之一出网 Kali ...

  6. 力扣319(java)-灯泡开关(中等)

    题目: 初始时有 n 个灯泡处于关闭状态.第一轮,你将会打开所有灯泡.接下来的第二轮,你将会每两个灯泡关闭第二个. 第三轮,你每三个灯泡就切换第三个灯泡的开关(即,打开变关闭,关闭变打开).第 i 轮 ...

  7. KubeCon 2020 演讲集锦|《阿里巴巴云原生技术与实践 13 讲》开放下载

    2020 年 7 月 30 日至 8 月 1 日,由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 Cloud Native + Open S ...

  8. 阿里云EMR Remote Shuffle Service在小米的实践

    ​简介:阿里云EMR自2020年推出Remote Shuffle Service(RSS)以来,帮助了诸多客户解决Spark作业的性能.稳定性问题,并使得存算分离架构得以实施,与此同时RSS也在跟合作 ...

  9. 业界首个机密计算容器运行时—Inclavare Containers正式进入CNCF!

    ​简介: Inclavare Containers 通过云原生计算基金会(CNCF)TOC 投票正式成为 CNCF 官方沙箱项目. 作者|彦荣 ​ 2021 年 9月 15 日,Inclavare C ...

  10. [Py] Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work

    当通过常规命令安装 pip install pydot 和 brew install graphviz 之后,在代码中 import pydot 依旧不生效. 比如:在 tensorflow 使用 t ...