quot;OK");
}
else
{//输出错误
var error = new InternalServerError($"请求路由 {context.HttpContext.Request.Path}未配置后端转发");
Logger.LogWarning($"{error}");
SetPipelineError(context, error);
}
}
private EndPoint GetEndPoint(string ipaddress, int port)
{
if (IPAddress.TryParse(ipaddress, out IPAddress ip))
{
return new IPEndPoint(ip, port);
}
else
{
return new DnsEndPoint(ipaddress, port);
}
}
}
}
5、启动Rpc客户端配置
目前Rpc的客户端配置我们还没启动,只需要在AddCzarOcelot
中添加相关注入即可。
var service = builder.First(x => x.ServiceType == typeof(IConfiguration));
var configuration = (IConfiguration)service.ImplementationInstance;
//Rpc应用
builder.AddSingleton<ICzarRpcProcessor, CzarRpcProcessor>();
builder.AddSingleton<IRpcRepository, SqlServerRpcRepository>();
builder.AddLibuvTcpClient(configuration);
6、配置客户端
最后别忘了配置Rpc客户端信息是否启用证书信息,为了配置信息的内容。
{
"CzarHost": {
"ProxyEndPoint": true,
"IsSsl": "false",
"PfxPath": "cert/datasync.pfx",
"PfxPassword": "bl123456",
"ClientConfig": {
"Demo.Rpc.Hello": {
"Host": "127.0.0.1",
"Port": 7711,
"Timeout": 20
}
}
}
}
现在让网关集成Rpc功能全部配置完毕。
四、网关Rpc功能测试
本次测试我在原有的网关基础上,增加不同类型的Rpc调用,就按照不同维度测试Rpc调用功能,本次测试案例是建立在Czar.Rpc 服务端基础上,正好可以测试。
1、测试路由参数
请求路径/hello/{no}/{name}
,调用的服务端方法Hello
,传入的两个参数分别是no ,name
。
可以在服务器端添加断点调试,发现确实接收到请求信息,并正常返回,下面是PostMan
测试结果。
2、使用Query方式传递参数
请求路径/rpc/query
,调用的服务端方法还是Hello
,参数分别是no ,name
。
3、使用Post方式传递Json
请求路径/rpc/body
,调用的服务器方法是HelloSendModel
。
4、混合参数使用
请求的路径/rpc/bodyparm/{name}
,调用的服务器端方法是HelloSendModelParm
。
所有的返回结果可自行调试测试,发现都能达到预期结果。
同时此网关还是支持默认的http请求的,这里就不一一测试了。
五、总结
本篇我介绍了什么是Rpc,以及Czar.Rpc的基本使用,然后使用Czar.Rpc框架集成到我们基于Ocelot扩展网关中,并实现了不能方式的Rpc调用,可以在几乎不改变现有流程的情况下很快速的集成进去,这也是Ocelot开发框架的魅力所在。
如果在使用过程中有什么问题或建议,可以在.NET Core项目实战交流群(637326624)
中联系作者。
最后本文涉及的所有的源代码可在https://github.com/jinyancao/czar.gateway中下载预览。