开源地址:https://github.com/cyq1162/Taurus.MVC
上篇文章介绍过:工业制造行业的低代码开发平台思维架构图
规划中涉及到了微服务,近些天经过努力和不断的代码与反复压力测试,终于出来一个简单的稳定版本了。
1、框架自带集成了以下功能:
1、服务端:网关、注册中心
2、客户端:微服务应用程序。
因此,即可以做为服务端运行,也可以做为客户端运行,下面进行简单演示:
1、新建一个任意空Web项目,以NET6为示例,在Nuget上引用Taurus.MVC,这里引入第2个Taurus.MVC.Core NET Core版本。

2、Program.cs 手动添加启动代码:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls(CYQ.Data.AppConfig.GetApp("Host"));//启动端口外置到配置文件。
builder.Services.AddHttpContext();//必要1
builder.Services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true).Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);//必要2:开启同步IO读取,对POST请求有用到。
var app = builder.Build();
app.UseHttpContext();//必要3
app.UseTaurusMvc(app.Environment);//必要4
app.Run();
补充说明:如果是.net framework 版本,引用时默认会在web.config自动生成以下启动配置:
<configuration>
<system.web>
<httpModules>
<!--Taurus IIS应用程序池:经典模式(下运行,开启此配置)-->
<add name="Taurus.Core" type="Taurus.Core.UrlRewrite,Taurus.Core" />
</httpModules>
</system.web>
<system.webServer>
<modules>
<!--Taurus IIS应用程序池:集成模式(下运行,开启此配置)-->
<add name="Taurus.Core" type="Taurus.Core.UrlRewrite,Taurus.Core" />
</modules>
</system.webServer>
</configuration>
appsettings.json 配置项:{
"AppSettings": {
"MicroService.Server.Name": "RegCenter",//设置为服务端运行的:注册中心
"Host": "http://*:9000"
}
}
发布运行,即成为注册中心(也具备网关功能)

看到第一二行有输出信息即为成功。
复制一份注册中心的程序,修改端口,再补上指向主地址的配置即可:
"MicroService.Server.RcUrl": "http://localhost:9000",//注册中心地址
这里将发布后的项目,复制一份,改一下配置文件:
{
"AppSettings": {
"MicroService.Server.Name": "Gateway",//服务名称
"MicroService.Server.RcUrl": "http://localhost:9000",//注册中心地址
"Host": "http://*:9001"
}
}
运行,即成为网关中心

看到第一二行输出,即为成功,并间隔性从注册中心读取服务列表。
复制一份项目做为微服务应用,直接使用Taurus.MVC的WebAPI功能添加一个Hello的控制器。

进行客户端应用配置:
{
"AppSettings": {
//控制器所在的程序集名称
"Taurus.Controllers": "WebAPI",
"MicroService.Client.Name": "Hello",//配置要注册的模块名称,可以多个逗号分隔,可以注册域名(实现域名绑定)
"MicroService.Client.RcUrl": "http://localhost:9000",//注册中心地地址
"Host": "http://*:9002"
}
}
然后发布,运行即可:

看第一二行,运行成功后,客户端会定时保持注册同步。
仅需要将客户端,复制多份,修改启动端口,直接运行,网关会自动采用轮循的方式负载均衡。
1、直接访问应用程序:

2、通过网关访问:

3、访问注册中心(注册中心也可以当网关用)

本篇介绍微服务框架的最基本使用,在任意开发框架上,引用Taurus.MVC的Nuget包,加上最简的几行配置,即可成为微服务的任意一端。
V3.0.3 已实现的功能:
------------------V3.0.3【新增内置微服务(网关和注册中心)功能】----------------
1、新增:注册中心服务注册。(2022-07-23)
2、新增:网关代理转发。(2022-07-23)
3、新增:网关安全效验([MicroService]属性标记时接口仅允许微服务间调用)。(2022-07-24)
4、新增:网关集群。(2022-07-25)
5、新增:注册中心故障转移。(2022-07-25)
6、新增:服务间调用方法提供。(2022-07-26)
7、优化:路由寻址与代理转发的兼容。(2022-07-27)
8、优化:统一日志监控方案,方便问题定位。(2022-07-28)
9、新增:文件代理转发,支持作为网站网关。(2022-07-29)
10、优化:Taurus.Core.Controller 去掉方法与属性:方法【CheckFormat】、属性【Sort、Order】。(2022-07-29)
11、新增:Kestrel下网关和服务启动后触发请求(配置项:MicroService.App.RunUrl)。(2022-07-29)
12、新增:Kestrel 实现多域名绑定转发。(2022-07-29)
13、优化:大量微服务的注册性能优化和并发测试。(2022-07-30)
14、优化:服务端和客户端各自独立。(2022-07-31)
15、新增:兼容微软mvc框架引用即可成为微服务端。(2022-08-01)
16、新增:完成Web的Cookie转发。(2022-08-01)
17、新增:控制台日志输出,方便调试。(2022-08-01)
微服务的其它内容细节,会在后续的教程文章中讲述到。
后续,针对Taurus.MVC ,会重新补充三个系列教程:
1、Taurus.MVC WebAPI 入门开发教程 系列。
2、Taurus.MVC 微服务框架 入门开发教程 系列。
3、Taurus.MVC Web应用程序 入门开发教程 系列。 作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth
我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。
是否有适用于Ruby语言的.NETFramework编译器?我听说过DLR(动态语言运行时),这是否将使Ruby能够用于.NET开发? 最佳答案 IronRuby是Microsoft支持的项目,建立在动态语言运行时之上。 关于.net-是否有Ruby.NET编译器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/199638/