二,关于gRPC的相关配置

关于gRPC的相关配置
  • 配置 TLS 证书和 HTTP2 协议
    appsettings.json 配置文件

    {
    	 "Kestrel": {
    		 "Endpoints": {
    			 "HttpsInlineCertFile": {
    				 "Url": "https://localhost:5001",
    				 "Protocols": "Http2",
    				 "Certificate": { //证书
    					 "Path": "<path to .pfx file>",
    					 "Password": "<certificate password>"
    				 }
    			 }
    		 }
     	} 
    }
    
  • 硬编码配置

            public static IHostBuilder CreateHostBuilder(string[] args) =>
             Host.CreateDefaultBuilder(args)
             .ConfigureWebHostDefaults(webBuilder =>
             {
                 webBuilder.ConfigureKestrel(options =>
                 {
                     options.Listen(IPAddress.Any, 5001, listenOptions =>
                     {
                         listenOptions.Protocols = HttpProtocols.Http2;
                         listenOptions.UseHttps("<path to .pfx file > ", " < certificate password > ");
                     });
                 });
                 webBuilder.UseStartup<Startup>();
             });
    
  • gRPC 服务直接使用 ASP.NET Core 依赖注入容器注入。

    public class GreeterService : Greeter.GreeterBase
    {
    	 public GreeterService(ILogger<GreeterService> logger)
    	 {
    	 } 
     }
    
  • 从 gRPC 服务方法中解析 HttpContext 实例

      public class GreeterService : Greeter.GreeterBase
            {
                public override Task<HelloReply> SayHello(HelloRequest request,
               ServerCallContext context)
                {
                    var httpContext = context.GetHttpContext();
                    //获取客户端证书
                    var clientCertificate = httpContext.Connection.ClientCertificate;
                    return Task.FromResult(new HelloReply
                    {
                        Message = "Hello " + request.Name + " from " +
                   clientCertificate.Issuer
                    });
                }
            }
    
  • gRPC 配置选项

  1. 配置服务端
    在这里插入图片描述

    	//作用全局
    	public void ConfigureServices(IServiceCollection services)
    	{
    		
    		 services.AddGrpc(options =>
    		 {
    		 options.EnableDetailedErrors = true;
    		 options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
    		 options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    		 });
    	}
    	
    	//作用单个
    	public void ConfigureServices(IServiceCollection services)
    	{
    		 services.AddGrpc().AddServiceOptions<MyService>(options =>
    		 {
    			 options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
    			 options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    		 });
    	}
    
  2. 配置客户端
    在这里插入图片描述

static async Task Main(string[] args)
{
	 var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
	 {
		 MaxReceiveMessageSize = 5 * 1024 * 1024, // 5 MB
		 MaxSendMessageSize = 2 * 1024 * 1024 // 2 MB
	 });
	 var client = new Greeter.GreeterClient(channel);
	 var reply = await client.SayHelloAsync(new HelloRequest { Name = 
	"GreeterClient" });
	 Console.WriteLine("Greeting: " + reply.Message);
}
  • 服务端日志配置
    由于 gRPC 服务托管在 ASP.NET Core 上,因此它使用 ASP.NET Core 日志记录系统。 在默认配置
    中,gRPC 记录的信息非常小,但这可以进行配置。

    {
    	 "Logging": {
    		 "LogLevel": {
    		 "Default": "Debug",
    		 "System": "Information",
    		 "Microsoft": "Information",
    		 "Grpc": "Debug"
    		 }
     	} 
     }
    
  • 硬编码配置

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    							 Host.CreateDefaultBuilder(args)
    							 .ConfigureLogging(logging =>
    							 {
    							 	logging.AddFilter("Grpc", LogLevel.Debug);
    							 })
    							 .ConfigureWebHostDefaults(webBuilder =>
    							 {{
    							 	webBuilder.UseStartup<Startup>();
    							 });
    
  • 环境变量配置
    Logging:LogLevel:Grpc = Debug

  • 客户端日志配置
    如果要从 ASP.NET Core 的应用程序调用 gRPC 服务,则可以通过依赖关系注入(DI)来解析记录
    器工厂:

    [ApiController]
    [Route("[controller]")]
    public class GreetingController : ControllerBase
    {
    	 private ILoggerFactory _loggerFactory;
    	 public GreetingController(ILoggerFactory loggerFactory)
    	 {
    	 	_loggerFactory = loggerFactory;
    	 }
    	 
    	 [HttpGet]
    	 public async Task<ActionResult<string>> Get(string name)
    	 {
    		 var channel = GrpcChannel.ForAddress("https://localhost:5001",
    		 new GrpcChannelOptions { LoggerFactory = _loggerFactory });
    		 var client = new Greeter.GreeterClient(channel);
    		 var reply = await client.SayHelloAsync(new HelloRequest { Name = name });
    		 return Ok(reply.Message);
    	 }
    }
    
  • 如果你的应用未使用依赖注入容器,则可以使用 LoggerFactory 创建日志记录:

    	var loggerFactory = LoggerFactory.Create(logging =>
    	{
    		 logging.AddConsole();
    		 logging.SetMinimumLevel(LogLevel.Debug);
    	});
    	var channel = GrpcChannel.ForAddress("https://localhost:5001",
    	 new GrpcChannelOptions { LoggerFactory = loggerFactory });
    	
    	var client = Greeter.GreeterClient(channel);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值