支持多种操作系统的新一代服务主机

一个应用需要常驻操作系统后台服务,可选框架有WindowsServiceLifeTime和SystemdLifeTime,但需要区别对待不同操作系统且需要另外写命令安装。NewLife.Agent自2008年设计以来,一直秉着简单易用的原则,不仅实现了服务框架,还实现了安装卸载的简易菜单。今天,我们让NewLife.Agent实现IHostLifeTime,成为同时支持Windows和Linux的新一代服务主机!

开源项目:https://github.com/NewLifeX/NewLife.Agent

Nuget:NewLife.Extensions.Hosting.AgentService

快速入门

新建WorkerService服务项目,从Nuget引入 NewLife.Extensions.Hosting.AgentService 。87bb9b5d5afb2eac2c2a0265d1b47d67.png

20b73796dadca9ae68ee48fa2526fbd5.png

入口函数中写入:

using NewLife.Extensions.Hosting.AgentService;
using TestWorker;IHost host = Host.CreateDefaultBuilder(args).ConfigureServices(services =>{services.AddHostedService<Worker>();}).UseAgentService(options =>{options.ServiceName = "TestWorker";options.DisplayName = "Worker服务测试";options.Description = "Worker服务的测试应用";}).Build();await host.RunAsync();

Woker类中写入

using NewLife.Log;namespace TestWorker
{public class Worker : BackgroundService{private readonly ILog _logger;public Worker(ILog logger){_logger = logger;}protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){_logger.Info("Worker running at: {0}", DateTimeOffset.Now);await Task.Delay(1000, stoppingToken);}}public override Task StartAsync(CancellationToken cancellationToken){XTrace.WriteLine(nameof(StartAsync));return base.StartAsync(cancellationToken);}public override Task StopAsync(CancellationToken cancellationToken){XTrace.WriteLine(nameof(StopAsync));return base.StopAsync(cancellationToken);}}
}

双击 TestWorker.exe 跑起来,也可以 dotnet TestWorker.dll 跑起来。

d8b509ad4c469b0b9df02c5c9241d9ec.png

按键 5 进入模拟运行,即是执行Worker等所有 IHostedService,方便开发调试。

cd2613fba2afd61e73bb94778764954c.png

安装服务

引入 NewLife.Extensions.Hosting.AgentService 后,应用本身直接启动时,是一个控制菜单,用于控制服务的安装卸载、启动和停止。控制菜单和服务属于两个进程。

按键 2 可以安装服务

dd98dc48060f2fdb9daa64d3e39c868a.png

这里失败了,因为安装卸载Windows服务需要管理员权限(Linux需要sudo)。在 TestWorker.exe 上点右键,“以管理员身份运行”。

按 3 即可启动服务,也可以在Windows服务中找到服务并启动。在 Linux 中,可以用 systemctl start TestWorker 启动服务。

33ed40f64d80e8a6f1177721dfab9b7c.png

至此,同时支持Windows和Linux的新一代服务主机示例完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[翻译]Dapr 长程测试和混沌测试

介绍这是Dapr的特色项目&#xff0c;具体参见&#xff1a;https://github.com/dapr/test-infra/issues/11 &#xff0c;在全天候运行的应用程序中保持Dapr可靠性至关重要。在部署真正的应用程序之前&#xff0c;可以通过在受控的混沌环境中构建&#xff0c;部署和操作此类应用程…

Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

一、问题描述&#xff1a; 在服务器端可以正常连接并操作mysql&#xff0c;但是在windows端使用navicat工具远程ssh连接就出现下面错误。 1、服务器端&#xff1a; 2、windows端navicat连接 3、原因 原来我今天在做主从配置的时候&#xff0c;将 /etc/my.cnf 配置文件中的b…

自定义ProgressBar(圆)

2019独角兽企业重金招聘Python工程师标准>>> <lib.view.progressbar.ColorArcProgressBarandroid:layout_width"match_parent"android:layout_height"220dip"android:id"id/barInterest"android:layout_centerInParent"true&…

C# Task用法详解

概述Task是微软在.Net 4.0时代推出来的&#xff0c;Task看起来像一个Thread&#xff0c;实际上&#xff0c;它是在ThreadPool的基础上进行的封装&#xff0c;Task的控制和扩展性很强&#xff0c;在线程的延续、阻塞、取消、超时等方面远胜于Thread和ThreadPool&#xff0c;所以…

函数调用堆栈图

转载于:https://www.cnblogs.com/DeeLMind/p/7617972.html

Session的原理,大型网站中Session方面应注意什么?

一、Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法&#xff08;通常用于pc端网站保持登录状态&#xff0c;手机端通常会使用token方式实现&#xff09;&#xff0c;存储在服务端。 Cookie是在客户端保持用户数据&#xff0c;存储位置是客户端&#xff08…

两圆相交求面积 hdu5120

转载 两圆相交分如下集中情况&#xff1a;相离、相切、相交、包含。 设两圆圆心分别是O1和O2&#xff0c;半径分别是r1和r2&#xff0c;设d为两圆心距离。又因为两圆有大有小&#xff0c;我们设较小的圆是O1。 相离相切的面积为零&#xff0c;代码如下&#xff1a; [cpp] view …

Python_list部分功能介绍

x.append():在列表尾部添加一个元素 x.clear():把列表清空 x.count():判断某个元素出现的次数 x.extend():合并两个列表&#xff0c;或者一个元组 x.index():获取元素下标 x.insert():指定下标添加元素 x.pop():移除某一元素&#xff0c;移除的元素可获取 x.remove():移除指定的…

一招解决开发环境问题 —— 远程容器开发指南

前言使用C作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。为了编译一个程序不仅需要下载各种依赖包&#xff0c;还可能面临本地系统不兼容、编译器版本不一致、包版本冲突等各种问题。笔者在运营iLogtail开源社区的过程中发现开发和调试环境问题也是成员问…

UITabBarController的基本原理及使用(一)

前言 UITabBarController在iOS开发中是一个高频使用的控制器&#xff0c;典型的案例如QQ、微信均使用UITabBarController布局。本文将从一个新建工程&#xff0c;和大家一起了解UITabBarController的基本原理和使用方法。 基本概念 UITabBarController能够方便地管理多个控制器…

C# 多线程ThreadPool用法举例

概述ThreadPool是.Net Framework 2.0版本中出现的。自从Task出来以后&#xff0c;ThreadPool已经很少用了&#xff0c;但是一些老的代码或者一些古老的程序猿还是会用到他&#xff0c;所以我们可以不用它&#xff0c;但是还是有必须学习和了解他.ThreadPool用法举例static void…

Mysql实现主从复制(一主双从)

一、环境介绍 LNMP&#xff08;centos7&#xff0c;mysql5.6&#xff09; vmware workstation pro配置了3个虚拟机&#xff0c;均安装了LNMP环境&#xff1a; master&#xff1a; 192.168.0.105 slave&#xff1a; 192.168.0.106 、192.168.0.107 二、原理 &a…

接口文档神器Swagger(下篇)

本文来自网易云社区作者&#xff1a;李哲二、Swagger-springmvc原理解析上面介绍了如何将springmvc和springboot与swagger结合&#xff0c;通过简单配置生成接口文档&#xff0c;以及介绍了swagger提供的一些注解。下面将介绍swagger是如何做到与springmvc结合&#xff0c;自动…

利用python进行数据分析D1——ch02引言

基础的课程还没学完&#xff0c;就来这本了&#xff0c;因为我平时的研究还是以数据的处理为主。把自己的事做好做细致读了一下介绍部分&#xff0c;下载书里用到的数据&#xff0c;下载地址&#xff1a;https://github.com/wesm/pydata-book 如果你需要完成以下几大类任务&…

记一次Memory Leak分析

起因&#xff1a;最近公司的一个web产品遇到了内存溢出&#xff0c;于是开始着手调查。调查&#xff1a;首先当务之急是找到那个或那些API导致Memory Leak&#xff0c;这个应该不难&#xff0c;根据监控分析&#xff0c;在内存上升时间段内有哪些API被访问&#xff0c;再就是根…

WebSocket教程

一、为什么需要 WebSocket&#xff1f; 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a…

C# WPF十个美观的界面设计展示

概述很多时候&#xff0c;我们设计的界面总是感觉缺乏美感&#xff0c;不是我们不会开发好看的界面&#xff0c;而是不知道怎么才算美观&#xff0c;这时候我们不妨看看别人好的页面是怎么做的.下面展示一些我觉得做的比较好的cs界面&#xff0c;希望能给大家在平时做界面设计时…

MySQL5.6二进制软件包编译安装详解(三)

一、软件环境 [rootlocalhost ~]# uname -r 3.10.0-862.el7.x86_64 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、安装部署过程详解 MySQL安装3种方式&#xff1a;1>rpm包安装应用文件默认安装在/usr/local 目录下2>源码编译需…

使用autok3s 安装k3s 集群 和 kuboard 管理集群

一、k3s介绍1.1 什么是k3s?k3s 是经过 CNCF 认证的由 Rancher 公司开发维护的一个轻量级的 Kubernetes 发行版&#xff0c;内核机制还是和 k8s 一样&#xff0c;但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性&#xff0c;同时改变了部署方式和运行方式&#xff0c;目的…

社区纠纷不断:程序员何苦为难程序员

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)今年年初&#xff0c;我们报道“因为被多人侮辱大吼&#xff0c;Swift 之父正式退出 Swift 核心团队”。诸如此类的“语言暴力”、“网络暴力”事件在开源社区乃至整个 IT 社区屡见不鲜。多个技术社区&#xff0c;都出…