我正在用 golang 编写一个程序,我正在构建基于六边形架构的程序。我想我的头脑主要围绕这个想法,但有些事情我就是想不通。
该程序的功能是监控多个 IP 摄像机的报警事件,接收器可以通过 HTTP2.0 PUSH REQUEST 接收报警事件的实时流。 (以防万一这不是技术术语,我的服务从 GET 请求建立 TCP/HTTP 连接并保持打开状态,当摄像机触发警报事件时,摄像机将其推回服务)
建筑层次
适配器
端口
服务
域名
用户通过 API 向系统添加设备,请求包括所需的监控时间表(接收器每天应启动和停止的时间)和 url。
调度器负责定期检查接收器是否打算根据其调度启动。如果它打算为设备运行,它会为该设备启动一个接收器。
接收器建立与 IP 摄像机的连接并循环处理警报事件并将它们传递给 EventService。
EventService 接收事件,并负责处理事件,基于域逻辑,并决定发送电子邮件或忽略它。它还将所有事件保存到 eventrepo。
代码的两部分我不确定它们在哪里是调度程序和接收器。他们也应该如此;
一种。都在同一个包中并放置在 Adapters 层
湾中的接收器适配器层 和Service层的调度器
C。服务层中的调度器和接收器?
我只是很困惑,因为接收器不是由用户直接启动的,而是由一个不断检查条件的运行循环启动的。但对于不同品牌的相机,我也可能有不同的接收器。这是一个实现细节,这意味着接收器应该在适配器层。这让我认为选项 b 是最好的。
我可能想多了,但让我知道你们都认为最好的选择是什么,或者建议一个更好的选择。
最佳答案
如果它可以帮助你,我的设计如下:
司机 Actor :
驱动的 Actor :
该应用程序(“警报监视器”)执行以下业务逻辑:
所以对我来说:
这是图片:
关于go - 六边形架构中的哪些地方适合周期性的后台任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68789016/