日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Envoy实现.NET架构的网关(三)代理GRPC

發布時間:2023/12/4 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Envoy实现.NET架构的网关(三)代理GRPC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.NET網關與Gateway實戰-Envoy與kong課程

  • Envoy實現.NET架構的網關(一)靜態配置與文件動態配置

  • Envoy實現.NET架構的網關(二)基于控制平面的動態配置

什么是GRPC

gRPC是一種與語言無關的高性能遠程過程調用 (RPC) 框架。gRPC 的主要好處是:

  • 現代、高性能、輕量級的 RPC 框架。

  • 契約優先的 API 開發,默認使用協議緩沖區,與語言無關的實現。

  • 可用于多種語言的工具來生成強類型服務器和客戶端。

  • 支持客戶端、服務器和雙向流調用。

  • 通過 Protobuf 二進制序列化減少網絡使用。

這些優勢使 gRPC 非常適合:

  • 效率至關重要的輕量級微服務。

  • 需要多種語言進行開發的多語言系統。

  • 需要處理流請求或響應的點對點實時服務。

什么是grpc-json轉碼器

grpc-json轉碼器是Envoy中的一個過濾器,它允許?RESTful?JSON API 客戶端通過 HTTP 向 Envoy 發送請求并代理到 gRPC 服務。

大家可以參考envoy官方文檔:https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter

下面我們來通過Envoy的grpc-json轉碼器實現grpc服務的代理。

創建grpc服務

.NET中的grpc可以參考官方文檔來實現。我們通過vs創建兩個默認的grpc server:GrpcService1與GrpcService2,來實現grpc的負載。

我們需要基于默認Grpc模板項目做出以下修改

  • 固定Grpc的端口,修改GrpcService1的默認端口為6001

  • 固定Grpc的端口,修改GrpcService2的默認端口為6002

  • 為了判斷是否實現負載,我們修改GrpcService1的SayHello方法返回體,讓其返回字符串Hello 1

  • 為了判斷是否實現負載,我們修改GrpcService2的SayHello方法返回體,讓其返回字符串Hello 2

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseUrls("http://*:6001").UseStartup<Startup>();});public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseUrls("http://*:6002").UseStartup<Startup>();});public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context){return Task.FromResult(new HelloReply{Message = "Hello 1 " + request.Name});}public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context){return Task.FromResult(new HelloReply{Message = "Hello 2 " + request.Name});}

?修改完之后我們啟動兩個Grpc Server

Grpc服務描述符

Envoy必須知道GRPC服務的proto描述符才能REST API轉碼,我們可以通過以下鏈接下載proto工具 https://github.com/protocolbuffers/protobuf/releases

下載完成之后,通過以下命令生成描述符,生成的描述符需要和配置文件一起掛載進容器

protoc.exe --descriptor_set_out=C:\greet.pb --include_imports C:\greet.proto --proto_path=C://

配置Envoy

Grpc相關的配置可以參考官方文檔,其中需要注意的是以下幾點

  • 我們需要將dns_type改為static,因為我們grpc用的是ip而不是域名

  • 并且需要指定auto_mapping: true,這樣就可以在我們沒有設置http method的情況下路由到我們的grpc服務中的方法

  • 指定grpc描述符,讓Envoy知道grpc定義

具體配置如下

admin:address:socket_address: {address: 0.0.0.0, port_value: 9901}static_resources:listeners:- name: listener1address:socket_address: {address: 0.0.0.0, port_value: 10000}filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerstat_prefix: grpc_jsoncodec_type: AUTOroute_config:name: local_routevirtual_hosts:- name: local_servicedomains: ["*"]routes:- match: {prefix: "/greet.Greeter"}route: {cluster: grpc, timeout: 60s}http_filters:- name: envoy.filters.http.grpc_json_transcodertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoderproto_descriptor: "/etc/envoy/greet.pb"services: ["greet.Greeter"]print_options:add_whitespace: truealways_print_primitive_fields: truealways_print_enums_as_ints: falsepreserve_proto_field_names: falseauto_mapping: true- name: envoy.filters.http.routerclusters:- name: grpctype: staticlb_policy: ROUND_ROBINdns_lookup_family: V4_ONLYtyped_extension_protocol_options:envoy.extensions.upstreams.http.v3.HttpProtocolOptions:"@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptionsexplicit_http_config:http2_protocol_options: {}load_assignment:cluster_name: grpcendpoints:- lb_endpoints:- endpoint:address:socket_address:address: 192.168.43.94port_value: 6001- endpoint:address:socket_address:address: 192.168.43.94port_value: 6002

啟動Envoy

需要特別注意的是,我們需要將envoy.yaml和描述文件都映射到我們的容器內

docker run --rm -it -p 9902:9902 -p 10000:10000 -v D:/gateway/envoy/config/grpc/:/etc/envoy/ -v D:/gateway/envoy/logs:/logs envoyproxy/envoy-dev -c /etc/envoy/envoy.yaml

測試

測試的時候需要注意的是

  • 轉碼器過濾器處理的請求路徑規則是/<package>.<service>/<method>

  • 我們需要使用POST方法。

?

?通過postman調用接口來看,我們成功利用GRPC-Json轉碼器實現了grpc的代理,并實現了grpc的負載!!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Envoy实现.NET架构的网关(三)代理GRPC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区不卡视频在线观看 | 日本中文字幕成人 | av男人的天堂在线 | 黄色在线观看免费 | 日本在线小视频 | 亚洲欧洲视频在线观看 | 国产午夜在线视频 | 边打电话边做 | 7777在线视频 | 天天操天天干天天干 | 亚洲女人的天堂 | 三级全黄做爰龚玥菲在线 | 伊人免费在线观看高清版 | 欧美性爱精品一区 | 中文字幕首页 | 日韩一级片av| 九色tv | 天天摸天天舔天天操 | 亚洲自拍偷拍第一页 | 少妇逼逼 | 国内成人综合 | 亚洲精品国产乱伦 | 中文字幕在线网址 | 日韩一级片在线观看 | 黄片毛片在线免费观看 | 国产三级第一页 | 午夜精品在线播放 | 人妻偷人精品一区二区三区 | 葵司免费一区二区三区四区五区 | 亚洲逼院 | 成人av影视在线观看 | 国产校园春色 | 色777| av黄色大片 | 伊人久久一区二区三区 | 伊人亚洲天堂 | 丰满大乳露双乳呻吟 | 91春色 | 亚洲美女网站 | 日韩小视频网站 | 国产精品久免费的黄网站 | 日本精品视频一区二区三区 | 日韩精品一区二区三区网站 | 丁香视频在线观看 | 潘金莲一级淫片a.aaaaa播放 | 亚洲色图一区二区 | 91精品国产闺蜜国产在线闺蜜 | 午夜xx| 国产一区二区免费 | 亚洲色图另类小说 | 欧美一级高清片 | 黄色a一级 | 国产chinasex对白videos麻豆 | 污污视频在线观看免费 | 亚洲欧美第一页 | 毛片aaa | 国产自产视频 | 国产美女无遮挡免费视频 | 精品一区二区久久久久久久网站 | 伊人青青草 | 极品销魂美女一区二区 | 亚洲综合久久av一区二区三区 | av色哟哟| 色人阁五月 | 日韩欧美中文一区 | 青草视频在线观看视频 | 69色堂 | 国产午夜不卡 | 一区二区免费看 | 国产美女在线播放 | 日本一区二区高清视频 | 草莓视频成人在线 | 亚洲v在线观看 | 欧美一级免费看 | 不卡影院 | 51ⅴ精品国产91久久久久久 | 久久在线视频精品 | av一区二区在线观看 | 久久久精品亚洲 | 亚洲一级成人 | 中文字幕第五页 | 久久亚洲精品小早川怜子 | 女人黄色片 | 一区二区三区四区中文字幕 | 四虎精品永久在线 | 国产精品一二 | 91中文字幕在线视频 | 国产三级一区 | 成人免费性视频 | 朋友人妻少妇精品系列 | 免费污网站在线观看 | 伊人66| 4444亚洲人成无码网在线观看 | 天堂av中文在线 | 日日操夜夜摸 | 少妇性l交大片7724com | 五月开心激情 | 天天躁日日躁狠狠躁 | 久久av一区二区三区 |