服务端

优质
小牛编辑
137浏览
2023-12-01

定义一个自己的服务

定义自己的proto文件,声明自己的服务接口

 syntax = "proto3";
 package grpc.domain;
 service RpcTest{
  rpc SayHello(HelloRequest) returns (HelloReponse);    
 }
 message HelloReponse{
  string Result = 1;
  int32 Code = 2;
  string Msg = 3;
 }

 message HelloRequest {
  string name = 1;
  int32 Age = 2;
 }

nuget安装Grpc.Tools grpc工具,在声明该项目为grpc服务

 <ItemGroup>
    <Protobuf Include="Protos\*.proto" GrpcServices="Server" />
 </ItemGroup>

实现定义的服务

public class HelloService : RpcTest.RpcTestBase
{
    public override Task<HelloReponse> SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReponse()
        {
            Code = 1,
            Msg = "hello simple",
            Result = JsonConvert.SerializeObject(request)
        });
    }
}

注册服务

在模块中重写MapGrpcService方法

  public override void MapGrpcService(IEndpointRouteBuilder endpointRoute)
  {
     endpointRoute.MapGrpcService<HelloService>();
  }

配置文件server.json 设置

{
  "Logging": { //日志配置节点
    "LogLevel": { //默认筛选器
      "Default": "Debug", //默认日志类别
      "System": "Information" //日志类别为System
    },
    "Console": { //针对日志提供程序Console的配置
      "LogLevel": { //日志筛选器
        "Default": "Information", //默认日志类别//Error
        "LoggingSample.Program": "Debug" //日志类别为LoggingSample.Program的筛选器
      }
    }
  },
  "Server": {
    "Name": "sample", //服务名称
    "Ip": "192.168.3.11", //服务地址
    "Port": "5003", //服务端口
    "EnableHttp": true, //是否开启http
    "Security": {
      "Whitelist": "*", //白名单
      "BlackList": "" //黑名单
    }
    //"KongAddress": "192.168.190.114:8001" //网关kong 地址(默认不使用)
    //"Weight": 5 //权重  --当负载策略为RandomWeight时设置权重值
  },
  //注册中心配置
  "Consul": {
    "ConnectionString": "192.168.180.55:8500", //注册中心地址
    "IsHealthCheck": true //是否进行健康检查
    //"Strategy": "RandomWeight" //随机权重。默认随机算法
  }      
}