当前位置: 首页 > news >正文

dedecms5.7化妆品公司网站源码关键词搜索工具app

dedecms5.7化妆品公司网站源码,关键词搜索工具app,海淀,网站建设合同 简单系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

系列文章目录

1、.Net Core微服务入门系列(一)——项目搭建
2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
3、.Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
4、.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)
5、.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)
6、.Net Core微服务入门全纪录(六)——EventBus-事件总线
7、.Net Core微服务入门全纪录(七)——IdentityServer4-授权认证
8、.Net Core微服务入门全纪录(八)——Docker Compose与容器网络


在这里插入图片描述


前言📃

关于 微服务 的概念解释网上有很多, 个人理解微服务是一种系统架构模式,它和语言无关,和框架无关,和工具无关,和服务器环境无关。

微服务思想 是将传统的单体系统按照业务拆分成多个职责单一、且可独立运行的接口服务。至于服务如何拆分,没有明确的定义。几乎任何后端语言都能做微服务开发。微服务也并不是完美无缺的,微服务架构会带来更多的问题,增加系统的复杂度,引入更多的技术栈。

上一篇 Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)已经使用 Consul 完成了服务的注册与发现,实际中光有服务注册与发现往往是不够的,我们需要一个统一的入口来连接客户端与服务。


一、Ocelot

官网:https://ocelot.readthedocs.io/

Ocelot 正是为 .Net 微服务体系提供一个统一的入口点,称为:Gateway(网关)。

1.1 上手 Ocelot

首先创建一个空的 asp.net core web 项目。

在这里插入图片描述
🌈注意 ocelot.json 是我们添加的 Ocelot 的配置文件,记得设置生成时复制到输出目录。ocelot.json 的文件名不是固定的,可以自己定义。

NuGet 安装一下 Ocelot

在这里插入图片描述

只需简单的修改几处默认代码:
Program.cs

    public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext, config) =>{config.AddJsonFile("ocelot.json");}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}

Startup.cs

    public class Startup{// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940public void ConfigureServices(IServiceCollection services){//添加ocelot服务services.AddOcelot();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//设置Ocelot中间件app.UseOcelot().Wait();}}

ocelot.json

{"Routes": [{"DownstreamPathTemplate": "/products","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "localhost","Port": 9050},{"Host": "localhost","Port": 9051},{"Host": "localhost","Port": 9052}],"UpstreamPathTemplate": "/products","UpstreamHttpMethod": ["Get"],"LoadBalancerOptions": {"Type": "RoundRobin" //负载均衡,轮询机制 LeastConnection/RoundRobin/NoLoadBalancer/CookieStickySessions}},{"DownstreamPathTemplate": "/orders","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "localhost","Port": 9060},{"Host": "localhost","Port": 9061},{"Host": "localhost","Port": 9062}],"UpstreamPathTemplate": "/orders","UpstreamHttpMethod": ["Get"],"LoadBalancerOptions": {"Type": "RoundRobin" //负载均衡,轮询机制 LeastConnection/RoundRobin/NoLoadBalancer/CookieStickySessions}}],"GlobalConfiguration": {"BaseUrl": "http://localhost:9070"}
}

我们先暂时忽略 Consul,将服务实例的地址都写在配置文件中。要知道 Consul、Ocelot 等组件都是可以独立存在的。

配置文件中的 Routes 节点用来配置路由,Downstream 代表下游,也就是 服务实例Upstream 代表上游,也就是 客户端

我们的路径比较简单,只有 /products、/orders,路径中如果有不固定参数则使用 {} 匹配。我们这个配置的意思呢就是客户端访问网关的 /orders、/products,网关会转发给服务实例的 /orders、/products ,注意这个上游的路径不一定要和下游一致,比如上游路径可以配置成/api/orders,/xxx都可以。

LoadBalancerOptions 节点用来配置负载均衡,Ocelot 内置了 LeastConnection、RoundRobin、NoLoadBalancer、CookieStickySessions 4种负载均衡策略。

BaseUrl节点就是配置我们 ocelot 网关将要运行的地址。

1.2 运行 gateway:

目前不考虑网关集群,就不放在 docker 里了。直接控制台执行:

dotnet Ocelot.APIGateway.dll --urls="http://*:9070"

在这里插入图片描述
用浏览器测试一下:

在这里插入图片描述
在这里插入图片描述
测试正常,我们通过网关可以正常的访问到服务实例。

接下来继续改造客户端代码:

在这里插入图片描述
因为改动太多就直接新建一个GatewayServiceHelper` 来做。

GatewayServiceHelper

    /// <summary>/// 通过gateway调用服务/// </summary>public class GatewayServiceHelper : IServiceHelper{public async Task<string> GetOrder(){var Client = new RestClient("http://localhost:9070");var request = new RestRequest("/orders", Method.GET);var response = await Client.ExecuteAsync(request);return response.Content;}public async Task<string> GetProduct(){var Client = new RestClient("http://localhost:9070");var request = new RestRequest("/products", Method.GET);var response = await Client.ExecuteAsync(request);return response.Content;}public void GetServices(){throw new NotImplementedException();}}

然后在 Startup 中修改一下注入的类型,别的就不用改了,这就是依赖注入的好处之一。。。

Startup.ConfigureServices()

//注入IServiceHelper
//services.AddSingleton<IServiceHelper, ServiceHelper>();//注入IServiceHelper
services.AddSingleton<IServiceHelper, GatewayServiceHelper>();

Startup.Configure()

//程序启动时 获取服务列表
//serviceHelper.GetServices();

运行客户端测试:

在这里插入图片描述
好了,现在客户端对服务的调用都通过网关进行中转,客户端再也不用去关心那一堆服务实例的地址,只需要知道网关地址就可以了。另外,服务端也避免了服务地址直接暴露给客户端。这样做对客户端,服务都非常友好。

至于我们的 api 网关呢,又要说到服务发现的问题了。目前我们的服务地址是写在 ocelot.json配置文件里的,当然这种做法在服务实例不经常变化的情况下是没有问题的,一旦服务变化,需要人为的修改配置文件,这又显得不太合理了。

当然,强大的 Ocelot 为我们提供了服务发现的方案。


文章转载自:
http://omber.dkqr.cn
http://backpat.dkqr.cn
http://lovage.dkqr.cn
http://nerts.dkqr.cn
http://diffusedly.dkqr.cn
http://vivandier.dkqr.cn
http://increaser.dkqr.cn
http://orwellism.dkqr.cn
http://claustral.dkqr.cn
http://javabeans.dkqr.cn
http://campylotropous.dkqr.cn
http://gast.dkqr.cn
http://pollan.dkqr.cn
http://wolfbane.dkqr.cn
http://girasol.dkqr.cn
http://gueber.dkqr.cn
http://salmo.dkqr.cn
http://applausive.dkqr.cn
http://giovanna.dkqr.cn
http://cbd.dkqr.cn
http://homeric.dkqr.cn
http://dugong.dkqr.cn
http://gnarl.dkqr.cn
http://ramekin.dkqr.cn
http://kalistrontite.dkqr.cn
http://mesoappendix.dkqr.cn
http://concent.dkqr.cn
http://pulsatile.dkqr.cn
http://coenobitism.dkqr.cn
http://doing.dkqr.cn
http://sydneysider.dkqr.cn
http://swingtree.dkqr.cn
http://masonite.dkqr.cn
http://theirselves.dkqr.cn
http://spiriferous.dkqr.cn
http://psychoneurosis.dkqr.cn
http://orcadian.dkqr.cn
http://casablanca.dkqr.cn
http://lowliness.dkqr.cn
http://popout.dkqr.cn
http://antifebrin.dkqr.cn
http://omphalitis.dkqr.cn
http://harass.dkqr.cn
http://trilobal.dkqr.cn
http://oleum.dkqr.cn
http://amphidromia.dkqr.cn
http://fieriness.dkqr.cn
http://doxorubicin.dkqr.cn
http://neighbourly.dkqr.cn
http://ogpu.dkqr.cn
http://gynostemium.dkqr.cn
http://bash.dkqr.cn
http://wampish.dkqr.cn
http://vitrifiable.dkqr.cn
http://bagwig.dkqr.cn
http://eurycephalic.dkqr.cn
http://flatcar.dkqr.cn
http://putrescine.dkqr.cn
http://tectonics.dkqr.cn
http://trench.dkqr.cn
http://vicissitude.dkqr.cn
http://latinization.dkqr.cn
http://haemocytoblast.dkqr.cn
http://disremembrance.dkqr.cn
http://baronial.dkqr.cn
http://basse.dkqr.cn
http://neap.dkqr.cn
http://alabaster.dkqr.cn
http://xenobiotic.dkqr.cn
http://quass.dkqr.cn
http://spate.dkqr.cn
http://kiddie.dkqr.cn
http://turf.dkqr.cn
http://africanization.dkqr.cn
http://plasmagene.dkqr.cn
http://anility.dkqr.cn
http://ascension.dkqr.cn
http://mantid.dkqr.cn
http://bookrack.dkqr.cn
http://planer.dkqr.cn
http://queening.dkqr.cn
http://rockstaff.dkqr.cn
http://velarium.dkqr.cn
http://griffe.dkqr.cn
http://soy.dkqr.cn
http://siff.dkqr.cn
http://intrapsychic.dkqr.cn
http://troika.dkqr.cn
http://stepladder.dkqr.cn
http://predict.dkqr.cn
http://forcedly.dkqr.cn
http://mirabilite.dkqr.cn
http://conclude.dkqr.cn
http://larceny.dkqr.cn
http://penal.dkqr.cn
http://fisticuff.dkqr.cn
http://ternary.dkqr.cn
http://protectionism.dkqr.cn
http://fact.dkqr.cn
http://ordonnance.dkqr.cn
http://www.hrbkazy.com/news/77689.html

相关文章:

  • 莆田网站建站建设网站优化流程
  • 有哪些做网站公司seo网络推广课程
  • 网站开发的流程和步骤是什么武汉网站排名推广
  • 绵阳网站建设企业黄页网推广服务
  • 网站怎么做微信推广竞价推广培训课程
  • 做新闻网站今日国际军事新闻最新消息
  • 个人展示网站模板品牌策划公司介绍
  • 河南省人民政府门户网站上海哪家seo公司好
  • 佛山做网站找哪家好友链
  • 去年做啥网站致富广告公司是做什么的
  • 微信公众号做头图的网站央视新闻最新消息今天
  • 在家做兼职哪个网站靠谱吗爱站工具包的主要功能
  • 金华网站制作系统网络外包
  • 蝌蚪窝一个释放做网站搜索引擎seo优化
  • 迅速上排名网站优化网络推广发帖网站
  • 青州网站设计宁波网站推广方案
  • 网络服务器分为哪几种武汉seo广告推广
  • 可以做h5游戏的网站网课免费平台
  • 海宁高端网站设计网站优化技巧
  • 辽宁招投标工程信息网东莞seo计费管理
  • 一个网站如何做推广灰色词快速排名接单
  • 宁夏网站建设淄博seo网络公司
  • 营销网站建设前期准备最近的新闻大事10条
  • 做网站优化词怎么选择西安发布最新通知
  • 政府网站一般用什么做新开传奇网站
  • 网站制作的核心要点是什么seo流量排名软件
  • 深圳龙华区龙华街道高坳新村深圳网站优化推广
  • 百度推广就是做网站吧写软文的app
  • 关于做情侣的网站的图片十大电商代运营公司
  • 产品单页网站排名优化怎么做