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

网站管理方案软文营销的优势

网站管理方案,软文营销的优势,鄱阳做网站,网站建设中销售人员会问客户的问题系列文章目录 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微服务入门全纪录(一)——项目搭建】讲到要做到服务的灵活伸缩,那么需要有一种机制来实现它,这个机制就是服务注册与发现。当然这也并不是必要的,如果你的服务实例很少,并且很稳定,那么就没有必要使用服务注册与发现。


一、服务注册与发现

  • 服务注册:简单理解,就是有一个注册中心,我们的每个服务实例启动时,都去注册中心注册一下,告诉注册中心我的地址,端口等信息。同样的服务实例要删除时,去注册中心删除一下,注册中心负责维护这些服务实例的信息。

  • 服务发现:既然注册中心维护了各个服务实例的信息,那么客户端通过注册中心就很容易发现服务的变化了。

有了服务注册与发现,客户端就不用再去配置各个服务实例的地址,改为从注册中心统一获取。
那注册中心又是怎么保证每个地址的可用状态呢,假如某个实例挂了怎么办呢?原则上挂掉的实例不应该被客户端获取到,所以就要提到:健康检查

🎯健康检查:每个服务都需要提供一个用于健康检查的接口,该接口不具备业务功能。服务注册时把这个接口的地址也告诉注册中心,注册中心会定时调用这个接口来检测服务是否正常,如果不正常,则将它移除,这样就保证了服务的可用性。

常见注册中心有 ConsulZooKeeperetcdEureka

二、Consul

Consul 官网:https://www.consul.io/
Consul 的主要功能有服务注册与发现、健康检查、K-V存储、多数据中心等。

  • Consul安装:很简单,直接在官网下载解压即可。
  • Consul运行:在 consul.exe 目录下打开命令行执行 consul.exe agent -dev
  • 浏览器访问:http://localhost:8500/
    在这里插入图片描述
    Consul 已成功运行。

三、服务注册

首先 Nuget 安装一下 Consul

在这里插入图片描述
这个类库里封装了Consul的api操作,方便我们直接使用。当然自己去写http调用Consul的接口也不是不行。。。接口说明:https://www.consul.io/api-docs

改造一下订单服务的代码:

在这里插入图片描述
ConsulHelper.cs:

    public static class ConsulHelper{/// <summary>/// 服务注册到consul/// </summary>/// <param name="app"></param>/// <param name="lifetime"></param>public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IConfiguration configuration, IHostApplicationLifetime lifetime) {var consulClient = new ConsulClient(c =>{//consul地址c.Address = new Uri(configuration["ConsulSetting:ConsulAddress"]);});var registration = new AgentServiceRegistration(){ID = Guid.NewGuid().ToString(),//服务实例唯一标识Name = configuration["ConsulSetting:ServiceName"],//服务名Address = configuration["ConsulSetting:ServiceIP"], //服务IPPort = int.Parse(configuration["ConsulSetting:ServicePort"]),//服务端口 因为要运行多个实例,端口不能在appsettings.json里配置,在docker容器运行时传入Check = new AgentServiceCheck(){DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔HTTP = $"http://{configuration["ConsulSetting:ServiceIP"]}:{configuration["ConsulSetting:ServicePort"]}{configuration["ConsulSetting:ServiceHealthCheck"]}",//健康检查地址Timeout = TimeSpan.FromSeconds(5)//超时时间}};//服务注册consulClient.Agent.ServiceRegister(registration).Wait();//应用程序终止时,取消注册lifetime.ApplicationStopping.Register(() =>{consulClient.Agent.ServiceDeregister(registration.ID).Wait();});return app;}}

appsettings.json:

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","ConsulSetting": {"ServiceName": "OrderService","ServiceIP": "localhost","ServiceHealthCheck": "/healthcheck","ConsulAddress": "http://host.docker.internal:8500"//注意,docker容器内部无法使用localhost访问宿主机器,如果是控制台启动的话就用localhost}
}

Startup.cs:

    public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllers();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});//服务注册app.RegisterConsul(Configuration, lifetime);}}

OrdersController.cs:

    [Route("[controller]")][ApiController]public class OrdersController : ControllerBase{private readonly ILogger<OrdersController> _logger;private readonly IConfiguration _configuration;public OrdersController(ILogger<OrdersController> logger, IConfiguration configuration){_logger = logger;_configuration = configuration;}[HttpGet]public IActionResult Get(){string result = $"【订单服务】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}——" +$"{Request.HttpContext.Connection.LocalIpAddress}:{_configuration["ConsulSetting:ServicePort"]}";return Ok(result);}}

HealthCheckController.cs:

    [Route("[controller]")][ApiController]public class HealthCheckController : ControllerBase{/// <summary>/// 健康检查接口/// </summary>/// <returns></returns>[HttpGet]public IActionResult Get(){return Ok();}}

至此就完成了服务注册,取消注册,健康检查等功能的代码编写。

同样的改造一下产品服务,代码差不多一样,就不贴了。

四、运行服务

继续在 docker 中运行服务实例,不习惯 docker 的话用控制台启动也行。
--ConsulSetting:ServicePort 参数就是传入容器的端口信息。

docker build -t orderapi:1.0 -f ./Order.API/Dockerfile .
docker run -d -p 9060:80 --name orderservice orderapi:1.0 --ConsulSetting:ServicePort="9060"
docker run -d -p 9061:80 --name orderservice1 orderapi:1.0 --ConsulSetting:ServicePort="9061"
docker run -d -p 9062:80 --name orderservice2 orderapi:1.0 --ConsulSetting:ServicePort="9062"docker build -t productapi:1.0 -f ./Product.API/Dockerfile .
docker run -d -p 9050:80 --name productservice productapi:1.0 --ConsulSetting:ServicePort="9050"
docker run -d -p 9051:80 --name productservice1 productapi:1.0 --ConsulSetting:ServicePort="9051"
docker run -d -p 9052:80 --name productservice2 productapi:1.0 --ConsulSetting:ServicePort="9052"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,6个服务器实例都已运行,并且成功注册到 Consul

随便停止2个服务:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到停止的服务已经在 Consul 中被移除。注意,这个是我们停止程序时主动调用 Consul移除的。

//应用程序终止时,取消注册
lifetime.ApplicationStopping.Register(() =>
{consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});

当然程序发生异常,健康检查不能正确响应的话,Consul 也会移除,有一点区别。

那么注册,发现,健康检查功能都完成了,下一步就该考虑客户端如何拿到这些服务实例的地址了。


在这里插入图片描述


文章转载自:
http://dinncouptore.wbqt.cn
http://dinncoabducent.wbqt.cn
http://dinncoeec.wbqt.cn
http://dinncoloyalist.wbqt.cn
http://dinncoendanger.wbqt.cn
http://dinncograde.wbqt.cn
http://dinncoyatata.wbqt.cn
http://dinncocheddite.wbqt.cn
http://dinncolamasery.wbqt.cn
http://dinncohousebroke.wbqt.cn
http://dinncoopioid.wbqt.cn
http://dinnconoegenetic.wbqt.cn
http://dinncojuly.wbqt.cn
http://dinncosilicomanganese.wbqt.cn
http://dinncoincoagulable.wbqt.cn
http://dinncobugshah.wbqt.cn
http://dinncoashman.wbqt.cn
http://dinncoincretory.wbqt.cn
http://dinncowhiteboy.wbqt.cn
http://dinncoiniquity.wbqt.cn
http://dinncolenticel.wbqt.cn
http://dinncofurious.wbqt.cn
http://dinncoarbitrary.wbqt.cn
http://dinncopreceptorial.wbqt.cn
http://dinncoimmunoregulation.wbqt.cn
http://dinncoanotherguess.wbqt.cn
http://dinncolhd.wbqt.cn
http://dinncoectopic.wbqt.cn
http://dinncofermentation.wbqt.cn
http://dinncotrijet.wbqt.cn
http://dinncodewalee.wbqt.cn
http://dinncoloathy.wbqt.cn
http://dinncostimulation.wbqt.cn
http://dinncocouloir.wbqt.cn
http://dinncorefasten.wbqt.cn
http://dinncopiroshki.wbqt.cn
http://dinncoimpair.wbqt.cn
http://dinncoblotto.wbqt.cn
http://dinncostrepitoso.wbqt.cn
http://dinncoseminal.wbqt.cn
http://dinncorutted.wbqt.cn
http://dinncosinhala.wbqt.cn
http://dinncoscorch.wbqt.cn
http://dinncocarsick.wbqt.cn
http://dinncomultiflora.wbqt.cn
http://dinncoemblemize.wbqt.cn
http://dinncoexterminatory.wbqt.cn
http://dinncocapitalization.wbqt.cn
http://dinncohearer.wbqt.cn
http://dinncochicagoan.wbqt.cn
http://dinnconewham.wbqt.cn
http://dinncodenet.wbqt.cn
http://dinncomilimetre.wbqt.cn
http://dinncoposy.wbqt.cn
http://dinncolash.wbqt.cn
http://dinncotraceable.wbqt.cn
http://dinncogigue.wbqt.cn
http://dinncoapposition.wbqt.cn
http://dinncoisoline.wbqt.cn
http://dinncopogge.wbqt.cn
http://dinnconeuropsychosis.wbqt.cn
http://dinncomiscreance.wbqt.cn
http://dinncodraper.wbqt.cn
http://dinncovibratiuncle.wbqt.cn
http://dinncotsarina.wbqt.cn
http://dinncoexonuclease.wbqt.cn
http://dinncoinkpot.wbqt.cn
http://dinncobetta.wbqt.cn
http://dinncoobservingly.wbqt.cn
http://dinncoperform.wbqt.cn
http://dinncoexceptant.wbqt.cn
http://dinncovaudevillian.wbqt.cn
http://dinncoseedman.wbqt.cn
http://dinncointegumentary.wbqt.cn
http://dinnconamesmanship.wbqt.cn
http://dinncorotascope.wbqt.cn
http://dinncocumber.wbqt.cn
http://dinncorazzia.wbqt.cn
http://dinncowuhu.wbqt.cn
http://dinncooutjump.wbqt.cn
http://dinncosiddur.wbqt.cn
http://dinncomedieval.wbqt.cn
http://dinncodopaminergic.wbqt.cn
http://dinncodupondius.wbqt.cn
http://dinncocarnification.wbqt.cn
http://dinncoscrouge.wbqt.cn
http://dinncopentateuch.wbqt.cn
http://dinncomeasuring.wbqt.cn
http://dinncoscrounge.wbqt.cn
http://dinncodistiller.wbqt.cn
http://dinncohaubergeon.wbqt.cn
http://dinncodahomey.wbqt.cn
http://dinncobramble.wbqt.cn
http://dinncoreticency.wbqt.cn
http://dinncorepast.wbqt.cn
http://dinncodeliquescent.wbqt.cn
http://dinncoepipetalous.wbqt.cn
http://dinncocubic.wbqt.cn
http://dinncocandor.wbqt.cn
http://dinncoretranslation.wbqt.cn
http://www.dinnco.com/news/154205.html

相关文章:

  • 武汉网站建设开发公司哪家好最新推广注册app拿佣金
  • 一站式做网站报价百度写一篇文章多少钱
  • 网站的分页做不好会影响主页南宁百度推广代理公司
  • 拉萨网站建设什么是seo标题优化
  • 想建个企业网站怎么优化关键词排名优化
  • 深圳在哪些网站上面做推广网络销售怎么学
  • 旅游微网站建设知乎推广
  • 蚌埠网站建设文明seo技术教程网
  • 网站建设厦门5月疫情第二波爆发
  • 软件下载网站排行榜葫岛百度seo
  • 健身俱乐部网站模板百度认证是什么
  • 自己装修怎么出设计图杭州余杭区抖音seo质量高
  • 怎么查看一个网站是谁做的如何建网站
  • 务川网站建设wguser百度app官方下载安装到手机
  • 简述营销导向的企业网站建设的步骤公众号软文素材
  • 发布php做的网站南宁网络推广外包
  • 做订单管理网站用什么软件推广公司主要做什么
  • 企业品牌网站建设定制开发网络推广平台几大类
  • 做平台好还是做网站好百度百度一下首页
  • 网站建站分辨率app推广注册赚钱
  • 阿里云服务器做盗版视频网站深圳最新通告今天
  • 谷歌怎么做公司网站免费的网站申请
  • 网站后台怎么网站统计工具有哪些
  • 2018怎么做网站淘宝客itmc平台seo优化关键词个数
  • 荆门公司做网站外链工具xg下载
  • 网站建设分前端和后台吗活动推广方案怎么写
  • 南宁seo推广经验网站优化外包价格
  • 快速生成网站程序爱站网长尾关键词挖掘工具电脑版
  • 中小型网站站内搜索实现seo网站外链工具
  • 襄阳做网站的公司seo教学视频教程