中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

中國十大品牌網(wǎng)官網(wǎng)seo工具下載

中國十大品牌網(wǎng)官網(wǎng),seo工具下載,免費網(wǎng)站建設(shè)模版下載,node.js做網(wǎng)站好累一、截止時間概述 截止時間功能讓 gRPC 客戶端可以指定等待調(diào)用完成的時間。 超過截止時間時,將取消調(diào)用。 設(shè)定一個截止時間非常重要,因為它將提供調(diào)用可運行的最長時間。它能阻止異常運行的服務(wù)持續(xù)運行并耗盡服務(wù)器資源。截止時間對于構(gòu)建可靠應(yīng)用非…

一、截止時間概述

  1. 截止時間功能讓 gRPC 客戶端可以指定等待調(diào)用完成的時間。
  2. ?超過截止時間時,將取消調(diào)用。
  3. ?設(shè)定一個截止時間非常重要,因為它將提供調(diào)用可運行的最長時間。
  4. 它能阻止異常運行的服務(wù)持續(xù)運行并耗盡服務(wù)器資源。
  5. 截止時間對于構(gòu)建可靠應(yīng)用非常有效,應(yīng)該進行配置。

二、取消概述

  1. 客戶端主動取消不再需要長期運行的調(diào)用
  2. 線程故障自動取消
  3. 超出截止時間觸發(fā)取消操作

三、實戰(zhàn)案例

  1. 首先準備一個grpc后端服務(wù)
  2. 其次準備一個webapi服務(wù)作為客戶端,方便HttpContext傳遞
  3. 客戶端工廠配置EnableCallContextPropagation 用于上下文傳遞截止時間
  4. 傳遞CancellationTokenSource
  5. 話不多說,通過代碼可以更好的看出程序的運行軌跡
// 引入proto文件
// 公共messages.protosyntax = "proto3";option csharp_namespace = "GrpcProject";package grpc.serviceing;// 請求體
message ServerRequest{string name = 1;double height = 2;int32 age = 3;bool flag = 4;float x = 5;float y = 6;float z= 7;repeated string departments = 8;
}message ServerFileRequest{bytes fileBytes = 1;
}// 響應(yīng)體
message ServerResponse{bool result = 1;
}// 服務(wù)dollar.proto文件syntax = "proto3";import "google/protobuf/empty.proto";
import "Protos/messages.proto";option csharp_namespace = "GrpcProject";package grpc.serviceing;service DollarRpc{rpc ServerOne (ServerRequest) returns (ServerResponse);rpc ServerTwo (ServerRequest) returns (google.protobuf.Empty);
}

服務(wù)端接口實現(xiàn):

   public class DollarService : DollarRpc.DollarRpcBase{public override async Task<ServerResponse> ServerOne(ServerRequest request, ServerCallContext context){await Console.Out.WriteLineAsync("-------------------------ServerOne------------------------------\r\n");await Task.Delay(TimeSpan.FromSeconds(8), context.CancellationToken);foreach (var prop in request.GetType().GetProperties()){await Console.Out.WriteLineAsync($"property  name:{prop.Name};value:{prop.GetValue(request)}");}return GetResponse();}public override async Task<Empty> ServerTwo(ServerRequest request, ServerCallContext context){await Console.Out.WriteLineAsync("-------------------------ServerTwo------------------------------\r\n");await Task.Delay(TimeSpan.FromSeconds(8), context.CancellationToken);foreach (var prop in request.GetType().GetProperties()){await Console.Out.WriteLineAsync($"property  name:{prop.Name};value:{prop.GetValue(request)}");}return new();}private ServerResponse GetResponse() => new() { Result = true };}

客戶端實現(xiàn)重點:

  1. program注入客戶端工廠并啟用截止時間配置
  2. 增加攔截器統(tǒng)一設(shè)定超時時間
  3. 調(diào)用查看結(jié)果
// program.csbuilder.Services.AddGrpcClient<DollarRpc.DollarRpcClient>(options =>
{options.Address = new Uri("https://localhost:7188");
}).EnableCallContextPropagation();
//攔截器過濾截止時間[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]public class GrpcFilterAttribute : Attribute, IActionFilter{public void OnActionExecuted(ActionExecutedContext context){}public void OnActionExecuting(ActionExecutingContext context){CancellationTokenSource tokenSource = new();GrpcServerCallContextFeature callContext = new(DateTime.UtcNow.AddSeconds(5), tokenSource.Token);context.HttpContext.Features.Set<IServerCallContextFeature>(callContext);}}public class GrpcServerCallContextFeature : ServerCallContext, IServerCallContextFeature{/// <summary>/// 構(gòu)造/// </summary>/// <param name="deadline"></param>/// <param name="cancellationToken"></param>public GrpcServerCallContextFeature(DateTime deadline, CancellationToken cancellationToken){DeadlineCore = deadline;CancellationTokenCore = cancellationToken;AuthContextCore = new AuthContext(null, new Dictionary<string, List<AuthProperty>>());}public ServerCallContext ServerCallContext => this;protected override string MethodCore { get; }protected override string HostCore { get; }protected override string PeerCore { get; }protected override DateTime DeadlineCore { get; }protected override Metadata RequestHeadersCore { get; }protected override CancellationToken CancellationTokenCore { get; }protected override Metadata ResponseTrailersCore { get; }protected override Status StatusCore { get; set; }protected override WriteOptions? WriteOptionsCore { get; set; }protected override AuthContext AuthContextCore { get; }protected override ContextPropagationToken CreatePropagationTokenCore(ContextPropagationOptions? options){return base.CreatePropagationToken(options);}protected override Task WriteResponseHeadersAsyncCore(Metadata responseHeaders){throw new NotImplementedException();}}
//調(diào)用
// 在相應(yīng)的類上打上標記   [GrpcFilter][Route("api/[controller]")][ApiController][GrpcFilter] // 設(shè)定截止時間過濾public class GrpcTestController : ControllerBase{private readonly DollarRpc.DollarRpcClient _dollarRpcClient;public GrpcTestController(DollarRpc.DollarRpcClient dollarRpcClient) => _dollarRpcClient = dollarRpcClient;[HttpGet("one")]public async Task<string> GetOneResult(){ServerRequest request = new ServerRequest(){Departments = {"one","two","three","four","five"},Age = 10,Flag = true,Height = 10,Name = "zhangsan",X = 10F,Y = 11F,Z = 12F};try{var response = await _dollarRpcClient.ServerOneAsync(request);if (response.Result){return "Success";}return "Fail";}catch (RpcException ex) when (ex.StatusCode == Grpc.Core.StatusCode.DeadlineExceeded){return "dealine timeout.";}catch (RpcException ex){return ($"NoResult:{ex.Message}");}}[HttpGet("two")]public async Task<string> GetTwoResult(){ServerRequest request = new ServerRequest(){Departments = {"one","two","three","four","five"},Age = 10,Flag = true,Height = 10,Name = "zhangsan",X = 10F,Y = 11F,Z = 12F};try{var response = await _dollarRpcClient.ServerTwoAsync(request);return "Success";}catch (RpcException ex) when (ex.StatusCode == Grpc.Core.StatusCode.DeadlineExceeded){return "dealine timeout.";}catch (RpcException ex){return ($"NoResult:{ex.Message}");}}}

四、查看執(zhí)行結(jié)果

服務(wù)端One:

客戶端One:

?

?swagger:

?另一個Two效果類似。同時服務(wù)端任務(wù)取消錯誤,也在截圖上有顯示。

五、源碼地址

鏈接:https://pan.baidu.com/s/1vleChFc3F6ILs-5ad8xQCA?
提取碼:mud0

http://www.risenshineclean.com/news/55140.html

相關(guān)文章:

  • 邯鄲網(wǎng)站建設(shè)效果注冊推廣賺錢一個80元
  • 備案不關(guān)閉網(wǎng)站的方法電腦版百度
  • 創(chuàng)意網(wǎng)站十大教育培訓(xùn)機構(gòu)排名
  • 用wordpress建仿站信陽百度推廣公司電話
  • 在萬網(wǎng)上域名了怎么做網(wǎng)站寧波網(wǎng)站推廣公司報價
  • wordpress仿站全套百度引擎搜索
  • 畢設(shè)做網(wǎng)站可能遇到的問題搜索引擎優(yōu)化涉及的內(nèi)容
  • 如何做產(chǎn)品網(wǎng)站網(wǎng)頁設(shè)計登封網(wǎng)站設(shè)計
  • 網(wǎng)站優(yōu)化內(nèi)鏈怎么做如何做網(wǎng)站推廣私人
  • 做的網(wǎng)站沒給我備案騰訊競價廣告
  • 醫(yī)藥招商網(wǎng)站大全北京百度關(guān)鍵詞推廣
  • 重慶那里做網(wǎng)站外包好推蛙網(wǎng)絡(luò)
  • 站外推廣怎么做seo外鏈招聘
  • 中國男女做網(wǎng)站免費發(fā)布產(chǎn)品的平臺
  • 網(wǎng)站建設(shè)合作合同seo基礎(chǔ)
  • 海外網(wǎng)站服務(wù)器網(wǎng)址外貿(mào)接單網(wǎng)站
  • 梅州南站30條新聞?wù)?/a>
  • 如何用div和css做購物網(wǎng)站關(guān)鍵詞歌詞打印
  • wordpress 3.4.2多地優(yōu)化完善疫情防控措施
  • 網(wǎng)站怎么維護更新bing搜索引擎入口
  • 學校門戶網(wǎng)站什么意思外貿(mào)網(wǎng)站大全
  • 深圳最近消息自己做seo網(wǎng)站推廣
  • 網(wǎng)站開發(fā)要服務(wù)器嗎東莞網(wǎng)站推廣企業(yè)
  • 有哪些網(wǎng)站可以做外貿(mào)網(wǎng)站推廣的途徑和方法
  • h5 做的網(wǎng)站 價格葫島百度seo
  • 做gif動圖的網(wǎng)站犯法嗎seo文章優(yōu)化技巧
  • 個人可以做視頻網(wǎng)站嗎企業(yè)查詢寶
  • 大慶開發(fā)網(wǎng)站公司每日新聞
  • 怎么注冊網(wǎng)站賬號seo查詢
  • 哈爾濱網(wǎng)站建設(shè)信息網(wǎng)站如何做優(yōu)化排名