创建一个基于Linux的产线设备应用
分类: Azure物联网 ◆ 标签: #Azure #IoT Hub # #入门 #指南 ◆ 发布于: 2023-06-13 22:37:47

我们前面创建了一个基于Windows Service
的设备应用,这个应用的架构是可以直接用在产线上的结构,我们本节还是使用同样的程序结构。我们借助Linux
的Systemd
来管理设备应用。
我们还是先创建我们的基本应用:
dotnet new worker -o IoTDeviceOnLinuxService
cd IoTDeviceOnLinuxService
dotnet add package Microsoft.Azure.Devices.Client
code .
我们最后一步是使用VS Code
打开项目目录,打开该目录之后,创建如下几个文件:
ExceptionHelper.cs
CustomRetryPolicy.cs
DeviceService.cs
关于这三个文件的内容,和之前基本一样, 详细的代码介绍,就不用展开了,大家可以自行参考我们的代码。
注意
本节的实例代码,您可以参考:https://github.com/hylinux/azure-iot-hub-examples/tree/main/IoTDeviceOnLinuxService
需要注意的是,我们的Programcs
内容:
using IoTDeviceOnLinuxService; using Microsoft.Extensions.Logging.Configuration; using Microsoft.Extensions.Logging.EventLog; IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService<DeviceService>(); }) .Build(); await host.RunAsync();
如果是在windows
上开发,建议大家使用Security Manager
来管理机密信息:
dotnet user-secrets init
dotnet user-secrets set "Device:ConnectionString:Primary" "主要连接字符串"
dotnet user-secrets set "Device:ConnectionString:Secondary" "次要连接字符串"
dotnet user-secrets set "Device:Connection:TransportType" "mqtt/amqp/etc"
$env:DOTNET_ENVIRONMENT = "Development"
上述也表面我们需要为应用定义如下几个环境变量:
Device__ConnectionString__Primary
Device__ConnectionString__Secondary
Device__Connection__TransportType
为了在Linux
上创建一个通过systemd
管理的服务,我们创建一个新的service
文件:iotapp.service
,内容如下:
[Unit] Description=IoT App Service On Linux [Service] WorkingDirectory=/home/iot/iotapp ExecStart=/usr/bin/dotnet /home/iot/iotapp/IoTDeviceOnLinuxService.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=iotapp User=iot Environment=DOTNET_ENVIRONMENT=Production Environment=Device__ConnectionString__Primary=HostName=<Primary Connection String> Environment=Device__ConnectionString__Secondary=<Secondy connection string> Environment=Device__Connection__TransportType=mqtt [Install] WantedBy=multi-user.target
需要注意上述文件中:
- 应用的放置位置:
/home/iot/iotapp
- 应用执行的实际用户:
iot
, 这里尤其需要注意的是,如果您的设备应用app有需要访问其他的资源,例如设备文件,那么这个用户需要拥有一定的权限,这个可以根据用户的环境进行调整。 - 几个环境变量的定义,以及机密信息的放置。
根据您的配置更改完成这个service
文件之后,将该文件拷贝到目录:/etc/systemd/system/
, 然后运行如下的命令:
sudo systemctl enable iotapp.service
然后就可以启动该服务了:
sudo systemctl start iotapp.service
sudo systemctl status iotapp.service
使用systemctl status
查看应用的状态,如果要查询该服务的日志,可以使用如下的命令:
sudo journalctl -fu iotapp.service
支持我们完成了基于Linux
的应用。