将 Consul Nacos 等配置为 Windows 系统服务

前言

在微服务开发中会用到各种中间件,包括服务发现/配置管理中心(例如 Consul 和 Nacos)等。在每次重新开机后,进行本地调试时,都需要启动这些中间件。有些中间件启动过程繁琐,启动参数也很多 (RocketMQ 说的就是你) ,为了每次启动时能偷点懒,于是思考有没有更便捷、更优雅的方式。

常规的 CMD 命令提示符启动方法缺点很多,比如每次都需要自己敲写启动命令、运行后命令窗口不能关闭等。虽然也有通过编写 .bat 和 .cmd 批处理文件的方法,可以实现简化操作、后台运行和开机自启动,但是也不能解决快捷停止运行等方面的需求,还不够方便。

受到 Redis redis-server.exe --service-install 把 Redis 配置成 Windows 服务的启发,本文以 Consul 和 Nacos 为例,总结了将其配置为 Windows 系统服务的两种方法。

sc create 命令(以 Consul 为例)

Windows 自带的 sc 命令就可以方便的添加、修改和删除服务。

bash 复制代码
sc create SERVICE_NAME binPath= PATH

sc create 命令详细的用法可以参考 官方文档

创建服务

接下来我们创建名称为 Consul 的系统服务,该服务会以开发模式启动 Consul 。

以管理员身份运行 CMD 命令提示符,执行命令

bash 复制代码
C:\Windows\System32>sc create Consul binPath= "D:\consul\consul.exe agent -dev"
[SC] CreateService 成功

这时就可以在服务列表中看见我们刚刚创建的名为 Consul 的服务了。

启动该服务后访问 http://localhost:8500/ 可以看到 Consul 已经成功运行了。

打开服务属性,可以将其配置为开机自动启动,也可以随时在服务窗口中启动、停止和重新启动该服务。

卸载服务

想要卸载刚刚创建的 Consul 服务也很简单。

以管理员身份运行 CMD 命令提示符,执行命令

bash 复制代码
C:\Windows\System32>sc delete Consul
[SC] DeleteService 成功

WinSW 工具(以 Nacos 为例)

当使用同样的方法,为 Nacos 创建服务时,没有办法正常启动服务,提示 错误 1053: 服务没有及时响应启动或控制请求。

这时就需要用到 WinSW 工具

官方介绍:
WinSW wraps and manages any application as a Windows service.
WinSW 可以将任何应用打包成 Windows 服务并进行管理。

1. 下载 WinSW

GitHub下载地址

本文以图中 WinSW-net461.exe 为例。

WinSW-net461.exe 要求 Windows 具有 .NET Framework 4.6.1 或更高版本。若版本不符合要求可下载 WinSW-x64.exeWinSW-x86.exeWinSW v2.12.0 对应版本

附: 本机 .NET Framework 版本查看方法

2. 重命名文件

将下载下来的 WinSW-net461.exe 文件复制到 Nacos 的安装目录 (D:\nacos) 并重命名为 nacos-winsw.exe

3. 编写配置文件

在 Nacos 的安装目录(与 nacos-winsw.exe 文件同一位置)下新建 nacos-winsw.xml 文件(文件名必须与 .exe 文件名相同),内容如下:

xml 复制代码
<!-- nacos-winsw.xml -->
<service>
  <!-- 指定在Windows系统内部使用的识别服务的ID。在系统中安装的所有服务中,这必须是唯一的,它应该完全由字母数字字符组成 -->
  <id>nacos-service</id>
  <!-- 服务的简短名称,它可以包含空格和其他字符。尽量简短,就像"id"一样,在系统的所有服务名称中,也要保持唯一 -->
  <name>nacos</name>
  <!-- 该服务可读描述。当选中该服务时,它将显示在Windows服务管理器中 -->
  <description>nacos-winsw-service</description>
  <!-- 指定要启动的可执行文件 -->
  <executable>%BASE%\bin\startup.cmd</executable>
  <!-- 传递给可执行文件的参数(此处表示Nacos单机模式运行,非集群模式) -->
  <arguments>-m standalone</arguments>
  <!-- 定义服务的启动模式 -->
  <startmode>Automatic</startmode>
  <!-- 日志文件输出目录 -->
  <logpath>%BASE%\logs</logpath>
</service>

XML 配置文件完整说明

4. 安装服务

以管理员身份运行 CMD 命令提示符,并切换到 Nacos 的安装目录,执行命令

bash 复制代码
D:\nacos>nacos-winsw.exe install
Installing service 'nacos (nacos-service)'...
Service 'nacos (nacos-service)' was installed successfully.

这时就可以在服务列表中看见我们刚刚创建的名为 nacos-service 的服务了。

启动该服务后访问 http://localhost:8848/nacos 可以看到 Nacos 已经以单机模式成功运行了。

打开服务属性,可以看到已经配置为开机自动启动,也可以随时在服务窗口中启动、停止和重新启动该服务。

5. 卸载服务

想要卸载刚刚创建的 nacos-service 服务也很简单。

以管理员身份运行 CMD 命令提示符,并切换到 Nacos 的安装目录,执行命令

bash 复制代码
D:\nacos>nacos-winsw.exe uninstall
Uninstalling service 'nacos (nacos-service)'...
Service 'nacos (nacos-service)' was uninstalled successfully.

同样的,此方法也适用于搭配 .cmd 文件把 RocketMQ 配置为 Windows 系统服务。

不足之处

配置为 Windows 系统服务后,虽然中间件的启动和停止比较方便,但是不能像在命令提示符中一样,随时查看输出、排查问题。WinSW 还可以在配置的日志文件中查看输出,sc.exe 方法就完全无处查看了。这也是一把双刃剑,在实际开发中可以按需选择。

相关推荐
fanly113 天前
Surging AI Agent 完整产品介绍
微服务·microservice
蝎子莱莱爱打怪10 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking11 天前
Java微服务练习方式
java·后端·微服务
米丘14 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质16 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质17 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯17 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y17 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰17 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了17 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking