【brpc学习实践】ParallelChannel的使用与并行请求

2023-12-01 02:12

本文主要是介绍【brpc学习实践】ParallelChannel的使用与并行请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概览

ParallelChannel (有时被称为“pchan”)同时访问其包含的sub channel,并合并它们的结果。用户可通过CallMapper修改请求,通过ResponseMerger合并结果。ParallelChannel看起来就像是一个Channel:

  • 支持同步和异步访问。

  • 发起异步操作后可以立刻删除。

  • 可以取消。

  • 支持超时。

任何brpc::ChannelBase的子类都可以加入ParallelChannel,包括ParallelChannel和其他组合Channel。用户可以设置ParallelChannelOptions.fail_limit来控制访问的最大失败次数,当失败的访问达到这个数目时,RPC会立刻结束而不等待超时。

一个sub channel可多次加入同一个ParallelChannel。当你需要对同一个服务发起多次异步访问并等待它们完成的话,这很有用。

ParallelChannel的内部结构大致如下:
在这里插入图片描述

应用场景及详细应用剖析

实际开发中,我们常对下游服务有多次访问的需求,使用该接口能让串行的多次访问并行化,从而降低服务的整体平响。

官方的案例中默认不去对CallMapper做调整,实际开发中通常需要重写自己的CallMapper。

class TestCallMapper : public baidu::rpc::CallMapper {
public:virtual baidu::rpc::SubCall Map(int channel_index/*starting from 0*/,const google::protobuf::MethodDescriptor* method,const google::protobuf::Message* request,google::protobuf::Message* response);
};class TestResponseMerger : public baidu::rpc::ResponseMerger {
public:virtual baidu::rpc::ResponseMerger::Result Merge(google::protobuf::Message* response,const google::protobuf::Message* sub_response);
};

下面我们来看下pchan的整体使用流程
与常规channel一样我们通常需要在client中初始化pchan

baidu::rpc::ParallelChannelOptions pchan_optons;
pchan_optons.timeout_ms = _options.timeout_ms;
pchan_optons.fail_limit = all_requests.requests_size();baidu::rpc::ParallelChannel pchan;
pchan.Init(&pchan_optons);

同时需要绑定我们自己定义的CallMapper和Merger

TestCallMapper* test_call_mapper = new BusBasicEtaCallMapper();
TestResponseMerger* test_response_merger = new BusBasicEtaResponseMerger();

call_mapper内含引用计数,一个call_mapper可与多个sub channel关联。所以我们只用定义一个就可以,根据请求的数量添加对应数量的sub_channel,注意,这里如果是对同一个下游多次请求,就只用同一个channel即可,如果我们想做的是同时请求多个下游,可以初始化不同的sub_channel,然后添加进来,只不过就会导致我们的协议(request、response)要求能复用,一般对多个下游我们还是推荐使用bthread或者pthread来使用不同的channel,以便使用不同的协议。当然我们也可以初始化多个pchan来同时请求多个下游。

for () {for (int i = 0; i < all_requests.requests_size(); ++i) {pchan.AddChannel(&_channel,baidu::rpc::DOESNT_OWN_CHANNEL,eta_call_mapper,eta_response_merger);}
}

AddChannel的源码如下

int ParallelChannel::AddChannel(ChannelBase* sub_channel,ChannelOwnership ownership,CallMapper* call_mapper,ResponseMerger

这篇关于【brpc学习实践】ParallelChannel的使用与并行请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439419

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安