You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

scanner.go 1.4 kB

2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package services
  2. import (
  3. "fmt"
  4. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  5. scmq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner"
  6. scevt "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner/event"
  7. )
  8. // ScannerService 是扫描器服务结构体,封装了与扫描器相关的服务功能。
  9. type ScannerService struct {
  10. *Service
  11. }
  12. // ScannerSvc 返回ScannerService的一个实例,提供扫描器服务。
  13. func (svc *Service) ScannerSvc() *ScannerService {
  14. return &ScannerService{Service: svc}
  15. }
  16. // PostEvent 执行数据巡查事件
  17. // event: 需要发送的事件对象。
  18. // isEmergency: 是否为紧急事件,影响事件处理的优先级。
  19. // dontMerge: 是否禁止将该事件与其它事件合并处理。
  20. // 返回值: 发送事件过程中遇到的错误。
  21. func (svc *ScannerService) PostEvent(event scevt.Event, isEmergency bool, dontMerge bool) error {
  22. // 从扫描器消息池中获取客户端实例
  23. scCli, err := stgglb.ScannerMQPool.Acquire()
  24. if err != nil {
  25. return fmt.Errorf("new scanner client: %w", err)
  26. }
  27. // 确保扫描器客户端在函数返回前被释放
  28. defer stgglb.ScannerMQPool.Release(scCli)
  29. // 向扫描器客户端发送事件
  30. err = scCli.PostEvent(scmq.NewPostEvent(event, isEmergency, dontMerge))
  31. if err != nil {
  32. return fmt.Errorf("request to scanner failed, err: %w", err)
  33. }
  34. return nil
  35. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。