vaizard / glued-integrations

集成管理器。

dev-main 2024-07-01 23:43 UTC

This package is auto-updated.

Last update: 2024-10-01 00:14:51 UTC


README

IF是Glued的集成框架,消息队列和调度器。

实现概述

  • if微服务是一组作为独立git项目glued-if-service_name实现的方法,用于与外部服务交互
  • 部署是由if__deployments表中的一行/对象定义的if微服务的配置和授权上下文
  • 操作是一个存储在if__actions表中的deployment:microservice.method映射,通过调用API端点(webhook)或由IF调度器触发
  • 操作状态使用if__actions_states创建一个有状态的历史记录
  • 调度器实现为一组类似于cron的规则,包含一些额外功能(例如ttl),存储在if__scheduler表中,并关联一个生产者,该生产者将定期填充消息队列,并运行订阅此队列的运行时守护程序,这些守护程序将启动工作进程(执行webhook API调用)
  • 消息队列实现为配置了客户端可以订阅的消息队列的if__mq_queue
  • 消息实现为if__mq_messages表,该表将队列映射到消息有效负载和消息头(例如ttl,请求,回复等)
  • 通知使用pg_notify功能实现,可以进一步通过rabbitmq扩展
  • 日志默认使用monolog库实现

集成

IF协调if微服务,这些服务简化了与其他任何服务的集成。

  • 每个if微服务实现与远程/外部服务的交互。
  • 每个if微服务都有相关的部署(一组描述if微服务使用的属性),例如
    • 部署元数据(例如名称,描述等)
    • 部署连接(例如远程主机,认证令牌,速率限制等)
    • 部署RBAC规则*(例如谁可以使用if微服务)
  • if微服务实现的方法(例如对外部服务的CRUD操作)与部署关联为操作(操作是可以在部署配置上下文中运行的if微服务方法)。操作
    • 可以按需运行(例如提供缓存数据转换接口,例如glued-if-ares_gov_cz)
    • 可以按计划运行(由调度器执行)
    • 可以相互交互(通过消息队列)

*) RBAC由glued-core的授权代理提供

调度器

tbd

消息队列

消息队列大致受到RabbitMQ的启发,以便在内置的基于PostgreSQL的队列和Rabbit之间实现轻松过渡。缩进的MQ用法是

  • 将计划任务分发到工作进程,
  • 促进松散耦合微服务之间的通信
  • 确保向用户发送内部通知并单独交付(带或不带用户确认)

IFMQ在作为类似RabbitMQ的消息代理时,实现了以下概念

  • 生产者 / 负责生成消息的代码 - php实现是glued-lib的一部分
  • 队列 / '消息目的地'通过if__queues表实现
  • 消费者 / 订阅队列的客户端
  • 交换 / 负责将消息传递到队列的代码 - 直接(单播),fanout(多播),header(基于规则的多播)

消息可以是