brpc快速上手:10分钟搭建你的第一个RPC服务

【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC". 【免费下载链接】brpc 项目地址: https://gitcode.com/gh_mirrors/brpc3/brpc

brpc是一款工业级C++ RPC框架,广泛应用于搜索、存储、机器学习、广告和推荐等高性能系统。本文将带你快速掌握brpc的核心概念和使用方法,从零开始搭建一个完整的RPC服务。

什么是brpc?

brpc(全称"better RPC")是由百度开发的高性能RPC框架,它支持多种协议(如baidu_std、hulu_pbrpc、nshead等),提供了丰富的功能特性,包括负载均衡、服务发现、超时控制、熔断降级等。其设计目标是满足大规模分布式系统的高性能需求,同时保持易用性和稳定性。

brpc RPC流程 图:brpc RPC流程示意图,展示了客户端与服务器之间的通信过程

环境准备

在开始之前,请确保你的系统满足以下要求:

  • C++11及以上编译器(GCC 4.8+ 或 Clang 3.4+)
  • CMake 3.10+
  • Git

首先,克隆brpc仓库:

git clone https://gitcode.com/gh_mirrors/brpc3/brpc
cd brpc

快速安装步骤

brpc提供了简单的编译和安装流程:

  1. 安装依赖:
sudo apt-get install -y build-essential libssl-dev libprotobuf-dev protobuf-compiler
  1. 编译brpc:
sh build.sh
  1. 安装brpc:
sudo make install

安装完成后,brpc库文件将被安装到系统默认路径,头文件位于/usr/local/include/brpc/目录下。

构建第一个RPC服务

下面我们将创建一个简单的"回声"服务,该服务接收客户端发送的消息并原样返回。

定义服务接口

首先,创建一个protobuf文件echo.proto,定义服务接口:

syntax = "proto2";
package example;

service EchoService {
    rpc Echo(EchoRequest) returns (EchoResponse);
}

message EchoRequest {
    required string message = 1;
}

message EchoResponse {
    required string message = 1;
}

实现服务

创建服务实现文件echo_service.cpp

#include <brpc/server.h>
#include "echo.pb.h"

using namespace std;

class EchoServiceImpl : public example::EchoService {
public:
    void Echo(google::protobuf::RpcController* cntl_base,
              const example::EchoRequest* request,
              example::EchoResponse* response,
              google::protobuf::Closure* done) {
        brpc::ClosureGuard done_guard(done);
        brpc::Controller* cntl = static_cast<brpc::Controller*>(cntl_base);
        
        // 设置响应消息
        response->set_message(request->message());
        
        // 打印请求信息
        LOG(INFO) << "Received request from " << cntl->remote_side()
                  << ": " << request->message();
    }
};

编写服务器代码

创建服务器主文件server.cpp

#include <brpc/server.h>
#include "echo.pb.h"
#include "echo_service.h"

int main() {
    // 创建服务器实例
    brpc::Server server;
    
    // 注册服务实现
    example::EchoServiceImpl echo_service;
    if (server.AddService(&echo_service, 
                          brpc::SERVER_DOESNT_OWN_SERVICE) != 0) {
        LOG(ERROR) << "Fail to add service";
        return -1;
    }
    
    // 设置服务器地址和端口
    brpc::ServerOptions options;
    options.idle_timeout_sec = 300;
    if (server.Start(8000, &options) != 0) {
        LOG(ERROR) << "Fail to start server";
        return -1;
    }
    
    // 等待服务器停止
    server.RunUntilAskedToQuit();
    return 0;
}

brpc服务器端架构 图:brpc服务器端架构示意图,展示了请求处理流程

编写客户端代码

创建客户端文件client.cpp

#include <brpc/channel.h>
#include "echo.pb.h"

int main() {
    // 初始化channel
    brpc::Channel channel;
    brpc::ChannelOptions options;
    options.protocol = "baidu_std";
    options.connection_type = "single";
    options.timeout_ms = 100;
    options.max_retry = 3;
    
    // 连接服务器
    if (channel.Init("127.0.0.1:8000", &options) != 0) {
        LOG(ERROR) << "Fail to initialize channel";
        return -1;
    }
    
    // 创建stub
    example::EchoService_Stub stub(&channel);
    
    // 发送请求
    example::EchoRequest request;
    example::EchoResponse response;
    brpc::Controller cntl;
    
    request.set_message("Hello, brpc!");
    stub.Echo(&cntl, &request, &response, NULL);
    
    // 处理响应
    if (!cntl.Failed()) {
        LOG(INFO) << "Received response: " << response.message();
    } else {
        LOG(ERROR) << "RPC failed: " << cntl.ErrorText();
    }
    
    return 0;
}

brpc客户端架构 图:brpc客户端架构示意图,展示了请求发送流程

编译运行

创建CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(echo_server)

find_package(brpc REQUIRED)
find_package(protobuf REQUIRED)

add_executable(server server.cpp echo_service.cpp echo.pb.cc)
target_link_libraries(server brpc protobuf)

add_executable(client client.cpp echo.pb.cc)
target_link_libraries(client brpc protobuf)

编译并运行:

mkdir build && cd build
cmake ..
make
./server &
./client

如果一切顺利,你将看到客户端输出:"Received response: Hello, brpc!"

常见问题解决

  1. 编译错误:如果遇到编译错误,请检查依赖库是否安装完整,特别是protobuf和brpc的版本是否匹配。

  2. 连接失败:确保服务器已启动且端口未被占用。可以使用netstat -tln命令检查端口状态。

  3. 性能优化:对于高性能需求,可以调整服务器线程数和连接池大小,具体配置可参考brpc官方文档

总结

通过本文的介绍,你已经了解了brpc的基本概念和使用方法,并成功搭建了一个简单的RPC服务。brpc作为一款工业级RPC框架,提供了丰富的功能和优异的性能,适合构建各种高性能分布式系统。

想要深入了解brpc的更多特性,可以查阅源代码中的示例程序和文档,或参考官方提供的详细教程。祝你在brpc的使用过程中收获更多!

【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC". 【免费下载链接】brpc 项目地址: https://gitcode.com/gh_mirrors/brpc3/brpc

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐