/images/avatar.png

Envoy的ext_proc

本篇文章中,我们学习Envoy中的ext_proc功能。

基本功能

首先我们搭建一个最简单的ext_proc,并观察他的基本使用方法。

首先我们搭建一个简单的外部后端。该后端只处理response header,他在原有header的基础上加一个x-extproc-helloheader。

Envoy里流式协议的数据流

定义后端服务

先用protobuf定义你的服务。该服务有一个双向流API BiStream。

syntax = "proto3";
package api;
option go_package = "envoystreaming/api";

service StreamService {
  rpc BiStream(stream Data) returns (stream Data);
}

message Data { string body = 1; }
提示
为了使Go服务能识别到你定义的服务。你需要先运行下面的代码生成服务定义。执行之后,你会看到他生成了名为stream_grpc.pb.go的Go语言服务定义。

protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    api/stream.proto

然后我们用Go语言实现该服务。该服务按顺序从输入流中轮询发送过来的数据。当他发现有数据发送过来的时候,间隔5秒发送一个ACK响应,一共发三个。