Taurus.MVC 微服务框架 入门开发教程:项目集成:7、微服务间的调用方式(调整):引用程序集及代码下载(新增)
前言:
今天补充一下 Taurus.MVC 微服务教程,介绍一下微服务中针对RPC方面调整或新增的功能。
之前系列文章目录:
Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。
Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。
在当前版本的 Taurus.MVC 中,变更了 Rpc 的调用方式,同时引入了微服务间调用的程序集生成下载,或代码引用。
下面一起看看相关的介绍。
1、Taurus.MVC 微服务 Rpc 的调用方式变更说明:
A、名称空间变更:
Rpc 相关功能,从微服务 Taurus.MicroService 名称空间变更到 Taurus.Plugin.Rpc 名称空间下。
B、调用方式变更:
调用方式:从Rpc.XXXAsync 变更为:Rest.XXXAsync 系列,起手势有点小变,方法不变。
C、增加同步调用方法:
例如:
方法:Rest.StartTaskAsync(......) 对应异步
方法:Rest.StartTask(......) 对应同步
下面是一个使用示例:
public void Start()
{
string postUrl = "http://192.168.100.11:27257/api/port";
RpcTaskRequest request = new RpcTaskRequest();
request.HttpMethod = "GET";
request.Url = postUrl;
RpcTaskResult result = Rest.StartTask(request);
if (result.Headers.Count > 0)
{
Response.AppendHeader("Port", result.Headers["Port"]);
}
Write(result.Text);
return;
}
整体说明:
Taurus.Plugin.Rpc.Rest 类提供一种基于REST方式的高性能的调用方法,适用于微服务间的调用,也适用于平时的网络请求,作为微服务间的通讯基础。 由于后续针对Taurus.MVC 微服务增加了新的封装调用方式,微服务间的调用将不再直接使用Rest调用,而是采用下面封装好的类库。
2、Taurus.MVC 微服务 演示示例启动:
对于常规的 Rpc 远程调用,如gRpc等,通常需要编写很多代码或配置项,这将很大程度影响开发效率。
而 Taurus.MVC 将解决这一点,可以直接在注册中心下载封装好的 Rpc调用类库。
为了演示,下面将启动示例程序:
1、启动微服务注册中心:(这里监听 8000 端口)

2、启动微服务客户端A:(从启动项中可看出只注册了 /api/ 服务)

3、Taurus.MVC 微服务 Rpc 的调用方式二:下载程序集:
下面教和演示如何下载程序集:
1、首先进入注册中心管理后台:在微服服主菜单 MS-Host 中如下图
管理后台默认路径:/admin/login

2、点击 api 模块接口,在下方的列表中点击 Download:
将引出以下界面,该界面可以自定义生成的 dll 名称(同时也影响名称空间)

按默认,直接点确定,即可下载:

默认浏览器会对dll类型做出提示,常规操作正常保留即可。

重点说明:
动态生成的 dll 运行时版本,将和微服务客户端的版本一致: 比如微服务客户端是部署成.NET8,那么生成的dll,只能在>=Net8的版本使用。 如果其它调用端的版本低怎么办? 下面会介绍介绍代码模式来解决这个问题。
4、Taurus.MVC 微服务 Rpc 的调用方式二:使用程序集:
接下来,我们可以在任意的其它微服务客户端中,引用该下载的dll,即可实现调用客户端,
在引用调用微服务之前,我们需要先将运行环境配置好,确保自身也是微服务客户端环境。
下面进行演示示例(以 .NET 8 为示例):
1、新建空项目,并引用 Taurus.MVC:

2、启用 Taurus.MVC
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTaurusMvc();
var app = builder.Build();
app.UseTaurusMvc();
app.UseStaticFiles();
app.Run();
3、进入管理后台,将项目调整为微服务客户端
新建如下两个文件夹,只有存在Views文件夹,MVC框架才会生成管理后台。

管理后台默认路径:/admin/login

填写配置,启动微服务客户端,当然,也可以通过配置项启动:
{
"appSettings": {
"MicroService.Client.Name": "*",
"MicroService.Client.RcUrl": "http://192.168.100.105:8000"
}
}
4、添加并使用RpcProxy类库:
在程序中引用下载的RpcProxy.dll,然后类库基本信息见如下图:

A、名称空间:Taurus.Plugin.MicroService.Proxy 这是基本名称空间。 B、RpcProxy 类为下载的 dll 名称。 C、API 为客户端注册的模块名。 D、API 下面的方法为接口名称。 E、API 下面的类名(以Para结尾)则为对应方法的参数类
了解了基本的信息,下面看一个简单示例:
public class RpcController : Taurus.Mvc.Controller
{
public string GetHelloResult()
{ var rpcTask = RpcProxy.API.Hello(null);
if (rpcTask.Result.IsSuccess)
{
return rpcTask.Result.Text;
}
else
{
return "None";
} }
}
调用输出结果:

对于调用 Hello 方法的参数,如果不需要参数,也不需要特殊请求头,可以传null。
再给一个演示示例,包含文件上传:
public string UploadFileResult()
{
RpcProxy.API.FilePara filePara = new RpcProxy.API.FilePara();
filePara.File = HttpPostedFileCreator.Create("a.webp");//图片默认在/wwwroot/目录下
var rpcTask = RpcProxy.API.File(filePara);
if(rpcTask.Result.IsSuccess)
{
return rpcTask.Result.Text;
}
else
{
return rpcTask.Result.Error.Message;
}
}
运行结果:

重点说明:
1、使用该类库前,需要确保引用了 Taurus.MVC,并确认运行环境也是微服务客户端。
2、如果方法有参数,则有一个对的方法名+Para 类,如上的Hello方法对应的参数为:HelloPara 类。
3、如果方法没有参数,则由默认RestDefaultPara 参数类服务。
4、参数类除了自身的属性为对应的参数,还有一个Header参数,用于设置请求头。
5、涉及文件上传的,由 HttpPostedFileCreator.Create 方法来提供。
4、Taurus.MVC 微服务 Rpc 的调用方式三:使用代码:
如果在整体微服务系列中,使用的 .NET 或 .NET Core 版本不一致,会导致其它客户端可能无法正确引用程序集,因此,框架代码了代码的方式。
下面看使用过程:
1、回到注册中心的管理后台:

2、点击ViewCode:
弹出以下提示,效果和下载 dll 的一致。

点击确定:

默认看到的代码,没有格式化,可以浏览器右键并点击: 查看页面源代码(可以看到代码经过了格式化,整齐了很多)

3、在项目中新建一个类,比如 RpcProx.cs,然后把该代码Copy过去即可。

其效果和直接引用下载的程序集是一致的。
目前为了简约,生成的dll程序集,或代码,是没有带注释的,若觉得对接口理解不清楚,可以在注册中心点击:ToDoc,即可进入接口文档。
总结:
新改进提供的Taurus Rpc 功能,可以简化微服务间的调用,不用再手动敲写模块名称、调用路径,及手动获取主机信息来实现负载均衡,这一切,由框架内置实现提供了。
新的Taurus Rpc 功能,将使得服务间的调用,更加轻松、简约、高效。
Taurus.MVC 微服务框架 入门开发教程:项目集成:7、微服务间的调用方式(调整):引用程序集及代码下载(新增)的更多相关文章
- Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
随机推荐
- vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.如何部署 前后端分离开发模式下,前后端是独立布署的,前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道 ...
- uniapp热更新和整包更新思路
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 我们知道,在打包Android App之前,我们需要先通过HX生成打包资源.如果是通过cli创建的项目,则通过以下命令生成打包资源: ya ...
- C# OpenCvSharp+ 微信二维码引擎实现二维码识别
微信开源了其二维码的解码功能,并贡献给 OpenCV 社区.其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中.从 OpenCV 4.5.2 版本开始,就可以直接 ...
- KingbaseES V8R6集群运维案例之---在线扩容节点通讯故障问题
案例说明: KingbaseES V8R6集群节点之间通过ssh或securecmdd工具通讯,默认节点之间通过公钥和私钥方式认证,可以密码通讯:在执行集群节点扩容时,出现以下故障,节点之间仍需要输入 ...
- KingbaseES V8R6集群部署案例之---openEuler系统脚本部署故障
案例说明: 在openEuler系统下通过脚本方式部署KingbaseES V8R6集群,脚本执行过程中,加载vip失败.本次故障问题,主要是因为openEuler系统shell和脚本的不兼容引起. ...
- KingbaseES Insert On Conflict 功能
针对数据写入时有主键冲突的情况,INSERT ON CONFLICT语法可以将冲突主键的INSERT行为转换为UPDATE行为,从而实现冲突主键的覆盖写入.该特性又称UPSERT覆盖写,与MySQL的 ...
- 使用Python的turtle模块绘制美丽的樱花树
引言 Python的turtle模块是一个直观的图形化编程工具,让用户通过控制海龟在屏幕上的移动来绘制各种形状和图案.turtle模块的独特之处在于其简洁易懂的操作方式以及与用户的互动性.用户可以轻松 ...
- 【直播回顾】OpenHarmony知识赋能第五期第二课——如何成为社区贡献达人
4月28日晚上19点,知识赋能第五期第二节课<如何成为OpenHarmony社区贡献达人?>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由华为社区运营专家祝尚元主讲 ...
- MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录
使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序. ORDER BY 关键字默认按升序排序.要按降序排序结果,使用 DESC 关键字. 示例按名称按字母顺序排序 ...
- C++调用Python-5:调用Python函数,传参数字+字符串
# mytest.py def myjoin(a, b): print("num a + str b") return f"{a}=={b}" #include ...