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

做网站推广一般多少钱深圳优化seo排名

做网站推广一般多少钱,深圳优化seo排名,wordpress增加类,网站需求前言很多时候#xff0c;后台任务对我们来说是一个利器#xff0c;帮我们在后面处理了成千上万的事情。在.NET Framework时代#xff0c;我们可能比较多的就是一个项目#xff0c;会有一到多个对应的Windows服务#xff0c;这些Windows服务就可以当作是我们所说的后台任务… 前言很多时候后台任务对我们来说是一个利器帮我们在后面处理了成千上万的事情。在.NET Framework时代我们可能比较多的就是一个项目会有一到多个对应的Windows服务这些Windows服务就可以当作是我们所说的后台任务了。我喜欢将后台任务分为两大类一类是不停的跑好比MQ的消费者,RPC的服务端。另一类是定时的跑好比定时任务。那么在.NET Core时代是不是有一些不同的解决方案呢答案是肯定的。Generic Host就是其中一种方案也是本文的主角。什么是Generic HostGeneric Host是ASP.NET Core 2.1中的新增功能它的目的是将HTTP管道从Web Host的API中分离出来从而启用更多的Host方案。这样可以让基于Generic Host的一些特性延用一些基础的功能。如如配置、依赖关系注入和日志等。Generic Host更倾向于通用性换句话就是说我们即可以在Web项目中使用也可以在非Web项目中使用虽然有时候后台任务混杂在Web项目中并不是一个太好的选择但也并不失是一个解决方案。尤其是在资源并不充足的时候。比较好的做法还是让其独立出来让它的职责更加单一。下面就先来看看如何创建后台任务吧。后台任务示例我们先来写两个后台任务(一个一直跑一个定时跑)体验一下这些后台任务要怎么上手同样也是我们后面要使用到的。这两个任务统一继承BackgroundService这个抽象类而不是IHostedService这个接口。后面会说到两者的区别。一直跑的后台任务先上代码来看看里面的细节。我们的这个服务继承了BackgroundService就一定要实现里面的ExecuteAsync至于StartAsync和StopAsync等方法可以选择性的override。我们ExecuteAsync在里面就是输出了一下日志然后休眠在配置文件中指定的秒数。这个任务可以说是最简单的例子了其中还用到了依赖注入如果想在任务中注入数据仓储之类的应该就不需要再多说了。同样的方式再写一个定时的。定时跑的后台任务这里借助了Timer来完成定时跑的功能同样的还可以结合Quartz来完成。和第一个后台任务相比没有太大的差异。下面我们先来看看如何用控制台的形式来启动这两个任务。控制台形式这里会同时引入NLog来记录任务跑的日志方便我们观察。Main函数的代码如下对于控制台的方式需要我们对HostBuilder有一定的了解虽说它和WebHostBuild有相似的地方。可能大部分时候我们是直接使用了WebHost.CreateDefaultBuilder(args)来构造的如果对CreateDefaultBuilder里面的内容没有了解那么对上面的代码可能就不会太清晰。上述代码的大致流程如下new一个HostBuilder对象配置日志主要是接入了NLogHost的配置这里主要是引入了CommandLine因为需要传递参数给程序应用的配置指定了配置文件和引入CommandLineService的配置这个就和我们在Startup里面写的差不多了最主要的是我们的后台服务要在这里注入启动其中2-5的顺序可以按个人习惯来写里面的内容也和我们写Startup大同小异。第6步启动的时候有多种方式这里列出了两种行为等价的方式。a. 通过RunConsoleAsync的方式来启动b. 先StartAsync然后再WaitForShutdownAsyncRunConsoleAsync的奥秘我觉得还是直接看下面的代码比较容易懂。这里涉及到了一个比较重要的IHostLifetimeHost的生命周期ConsoleLifeTime是默认的一个可以理解成当接收到ctrlc这样的指令时它就会触发停止。接下来写一下nlog的配置文件?xml version1.0 encodingutf-8 ? nlog xmlnshttp://www.nlog-project.org/schemas/NLog.xsd xsi:schemaLocationNLog NLog.xsdxmlns:xsihttp://www.w3.org/2001/XMLSchema-instanceautoReloadtrueinternalLogLevelInfo targetstarget xsi:typeFilenameghostfileNamelogs/ghost.loglayout${date}|${level:uppercasetrue}|${message} //targetsruleslogger nameGHost.* minlevelInfo writeToghost /logger nameMicrosoft.* minlevelInfo writeToghost //rules /nlog这个时候已经可以通过命令启动我们的应用了。dotnet run -- --environment Staging这里指定了运行环境为Staging而不是默认的Production。在构造HostBuilder的时候可以通过UseEnvironment或ConfigureHostConfiguration直接指定运行环境但是个人更加倾向于在启动命令中去指定避免一些不可控因素。这个时候大致效果如下虽然效果已经出来了不过大家可能会觉得这个有点小打小闹下面来个略微复杂一点的后台任务用来监听并消费RabbitMQ的消息。消费MQ消息的后台任务代码细节就不需要多说了下面就启动MQ发送程序来模拟消息的发送同时看我们任务的日志输出由启动到停止效果都是符合我们预期的。下面再来看看Web形式的后台任务是怎么处理的。Web形式这种模式下的后台任务其实就是十分简单的了。我们只要在Startup的ConfigureServices方法里面注册我们的几个后台任务就可以了。启动Web站点后我们发了20条MQ消息再访问了一下Web站点的首页最后是停止站点。下面是日志结果都是符合我们的预期。可能大家会比较好奇这三个后台任务是怎么混合在Web项目里面启动的。答案就在下面的两个链接里。https://github.com/aspnet/Hosting/blob/2.1.1/src/Microsoft.AspNetCore.Hosting/Internal/WebHost.cs#L153https://github.com/aspnet/Hosting/blob/2.1.1/src/Microsoft.AspNetCore.Hosting/Internal/HostedServiceExecutor.cs上面说了那么多都是在本地直接运行的可能大家会比较关注这个要怎样部署下面我们就不看看怎么部署。部署部署的话针对不同的情形(web和非web)都有不同的选择。正常来说如果本身就是web程序那么平时我们怎么部署的就和平时那样部署即可。花点时间讲讲部署非web的情形。其实这里的部署等价于让程序在后台运行。在Linux下面让程序在后台运行方式有好多好多Supervisor、Screen、pm2、systemctl等。这里主要介绍一下systemctl同时用上面的例子来进行部署由于个人服务器没有MQ环境所以没有启用消费MQ的后台任务。先创建一个 service 文件vim /etc/systemd/system/ghostdemo.service内容如下[Unit] DescriptionGeneric Host Demo[Service] WorkingDirectory/var/www/ghost ExecStart/usr/bin/dotnet /var/www/ghost/ConsoleGHost.dll --environment Staging KillSignalSIGINT SyslogIdentifierghost-example[Install] WantedBymulti-user.target其中各项配置的含义可以自行查找这里不作说明。然后可以通过下面的命令来启动和停止这个服务service ghostdemo start service ghostdemo stop 测试无误之后就可以设为自启动了。systemctl enable ghostdemo.service下面来看看运行的效果我们先启动服务然后去查看实时日志可以看到应用的日志不停的输出。当我们停了服务再看实时日志就会发现我们的两个后台任务已经停止了也没有日志再进来了。再去看看服务系统日志sudo journalctl -fu ghostdemo.service发现它确实也是停了。在这里我们还可以看到服务的当前环境和根路径。IHostedService和BackgroundService的区别前面的所有示例中我们用的都是BackgroundService而不是IHostedService。这两者有什么区别呢可以这样简单的理解IHostedService是原料BackgroundService是一个用原料加工过一部分的半成品。这两个都是不能直接当成成品来用的都需要进行加工才能做成一个可用的成品。同时也意味着如果使用IHostedService可能会需要做比较多的控制。基于前面的打印后台任务在这里使用IHostedService来实现。如果我们只是纯綷的把实现代码放到StartAsync方法中那么可能就会有惊喜了。运行之后想用ctrlc来停止发现还是一直在跑。ps一看这个进程还在kill掉之后才不会继续输出。。问题出在那里呢原因其实还是比较明显的因为这个任务还没有启动成功一直处于启动中的状态换句话说StartAsync方法还没有执行完。这个问题一定要小心再小心。要怎么处理这个问题呢解决方法也比较简单可以通过引用一个变量来记录要运行的任务将其从StartAsync方法中解放出来。这样就能让这个任务真正的启动成功了效果就不放图了。相对来说BackgroundService用起来会比较简单实现核心的ExecuteAsync这个抽象方法就差不多了出错的概率也会比较低。IHostBuilder的扩展写法在注册服务的时候我们还可以通过编写IHostBuilder的扩展方法来完成。使用的时候就可以像下面一样。总结Generic Host让我们可以用熟悉的方式来处理后台任务不得不说这是一个很?的特性。无论是将后台任务独立一个项目还是将其混搭在Web项目中都已经符合不少应用的情景了。最后放上本文用到的示例代码 https://github.com/catcherwong/Demos/tree/master/src/GenericHostDemo 相关文章在.NET Core微服务中使用HostBuilder和Generic HostAsp.net Core 2.1新功能Generic Host(通用主机)深度学习ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务.NET Core开源组件:后台任务利器之HangfireQuartz.Net分布式任务管理平台第二版Asp.Net Core 使用Quartz基于界面画接口管理做定时任务.Net Core小技巧 - Hosted Services Quartz实现定时任务调度原文地址: https://www.cnblogs.com/catcher1994/p/9961228.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.zqtcl.cn/news/726638/

相关文章:

  • 找代码的网站有一个网站是做釆购的是什么网
  • 做外贸最好的网站有哪些php网站开发工程师待遇
  • 做推文封面的网站首页>新闻>正文 网站怎么做
  • 黄页推广引流网站企业网站导航菜单
  • 合肥专门做网站的公司广告代理商是什么意思
  • wordpress显示一个类目seo推广
  • 营销型电子商务网站特点如何申请免费空间和域名
  • 网站建设 主要学是么vk汉化网站谁做的
  • 做英文网站费用多少学校网站开发毕业设计
  • 红动中国设计网站官网网页制作的论文
  • 云阳一平米网站建设西安设计工作室推荐
  • 网站长尾关键词优化网页设计定制代理
  • 海东电子商务网站建设运城市网站建设公司
  • 网站建设得要素电子商务网站建设与维护项目五
  • 网站备案无前置审批文件南宁市建设厅网站
  • 百度网站体检手机网页小游戏
  • 大型购物网站建设费用广告设计与制作软件有哪些
  • 郑州建设工程交易中心网站汉寿做网站的公司
  • 青岛企业做网站startuply中文版wordpress主题
  • 商标设计网站猪八戒网站建设与设计教程
  • 网站建设积分wordpress添加右侧菜单
  • 网站策划资料方案天津优化公司
  • 做网站推广哪家公司好成都最正规的装修公司
  • 菜鸟建网站如何制作推广网站
  • 无锡企业建站系统广州品牌网站建设
  • 什么网站能免费做公众号封面wordpress主题打不开
  • 扬州外贸网站建设制作广告的软件
  • 一个主机怎么做两个网站百度上的网站怎么做
  • 济南建设工程业绩公示的网站wordpress载入等待
  • seo公司名字太原百度seo排名软件