跳到主要内容

机顶盒请求

核心概念:文档中心 | 机顶盒请求 | 概览

核心概念:文档中心 | 机顶盒请求 | 三、机顶盒请求匹配逻辑流程 (规则引擎)

三、机顶盒请求匹配逻辑流程 (规则引擎)

当业务系统(如任务推送)需要获取当前设备匹配的业务内容时,执行以下流程。

1、主要是从缓存取数据,但是如果缓存未命中则需要加分布式锁后查询数据库,查询到数据库则更新redis缓存,查询不到也要设置一个对应Key的防穿透占位符。
2、除了查询r:m:r:{mac}的key数量太多不能用本地换成以外,其它key查询要再加入二级缓存,过期时间用全局过期时间,现在是2分钟,降低redis的压力。


核心概念:文档中心 | 机顶盒请求 | 请求处理流程图 (规则引擎)

请求处理流程图 (规则引擎)

Mermaid Diagram Code:

sequenceDiagram
    participant STB as 机顶盒/设备
    participant Biz as 业务系统(如任务推送)
    participant Rule as 规则引擎(RuleRunUtil)
    participant Redis as Redis缓存
    participant LiteFlow as LiteFlow引擎

    STB->>Biz: 1. 请求获取业务数据 (携带MAC/设备信息)
    Biz->>Rule: 2. 调用 matchBusinessIds(业务类型, 设备详情)
    
    Note right of Rule: 3. 初筛候选规则
    Rule->>Redis: 获取 MAC专属规则 (r:m:r:{mac})
    Rule->>Redis: 获取 渠道关联规则 (r:c:r:{channel})
    Rule->>Redis: 获取 该业务类型规则 (r:btype:r:{type})
    Rule->>Redis: 获取 无限制规则 (r:no:limit:r)
    
    Rule->>Rule: 4. 集合运算 (求交集/并集)
    Note right of Rule: 候选集 = (MAC规则 U 无限制 U 渠道规则) ∩ 业务类型规则
    
    loop 5. 遍历候选规则
        Rule->>Redis: 获取规则详情 (data:base:rule:{id})
        Rule->>Rule: 检查地区限制 (Region Check)
        alt 地区匹配通过
            Rule->>LiteFlow: 执行EL表达式匹配 (传入设备上下文)
            LiteFlow-->>Rule: 返回匹配结果 (True/False)
        else 地区不匹配
            Rule->>Rule: 跳过该规则
        end
    end
    
    Note right of Rule: 6. 数量限制检查
    loop 对匹配成功的规则
        Rule->>Redis: 获取对应的业务ID (r:r:btype:b:{id})
        Rule->>Redis: 检查业务剩余数量 (r:btype:b:limit)
        alt 有余量/无限制
            Rule->>Rule: 加入最终结果集
        else 无余量
            Rule->>Rule: 丢弃
        end
    end
    
    Rule-->>Biz: 7. 返回匹配成功的 业务ID集合
    Biz->>Biz: 根据业务ID查询具体配置
    Biz-->>STB: 8. 返回最终业务数据

核心概念:文档中心 | 机顶盒请求 | 匹配步骤详解 (规则引擎)

匹配步骤详解 (规则引擎)

  1. 请求输入: 业务模块传入 【设备MAC或者设备MAC+CPU】 和 业务类型 (BusinessType)
  2. 信息补全: 规则引擎根据 MAC 查询设备详细画像(包括渠道、地区、硬件配置等)。
  3. 初筛候选规则:
    • 步骤 A: 查询 r:m:r:{mac} (MAC -> 规则ID) 获取 MAC专属规则集合 (macRuleIds)。
    • 步骤 B: 查询 r:btype:r:{business_type} (业务类型 -> 规则ID) 获取 该业务类型的规则集合 (businessTypeRuleIds)。
    • 步骤 C: 查询 r:c:r:{channel_id} (渠道ID -> 规则ID) 获取 渠道关联规则集合 (channelRuleIds)。
    • 步骤 D: 查询 r:no:limit:r(无设备限制-->规则ID) 获取 无设备限制的规则集合 (noLimitRuleIds)。
  4. 集合运算:
    • 候选规则集合 = (macRuleIdsnoLimitRuleIdschannelRuleIds ) ∩ businessTypeRuleIds
  5. 规则计算 (LiteFlow):
    • 遍历候选规则集。
    • 从缓存 data:base:rule:{rule_id} (规则ID->规则详情) 加载规则详情。
    • 先判断下规则详情中是否有地区限制,如果有,则判断设备地区是否在规则地区范围内,不在则跳过该规则。
    • 将设备详情数据注入 LiteFlow 上下文。
    • 执行 EL 表达式进行匹配计算。
    • 收集计算结果为 True 的规则ID。
  6. 查看是否有数量限制:
    • 根据匹配成功的 RuleID,查询 r:r:btype:b:{rule_id} (规则ID+业务类型 -> 业务ID) 获取全部 业务ID集合
    • 遍历业务ID集合,从r:btype:b:limit:{business_type}(业务类型->业务ID->剩余数量限制信息)中获取数量信息,判断剩余数量是否满足要求,如果没有余量就从业务ID集合中移除,这里不能用本地二级缓存,需要全部从redis取,除非是防缓存穿透值。
  7. 结果输出:
    • 返回业务ID集合给调用方,如任务推送ID集合。

核心概念:文档中心 | 机顶盒请求 | 四、高级功能说明 (规则引擎)

四、高级功能说明 (规则引擎)

  1. 计算设备总数方法:人工触发计算,默认不算,异步处理,同时只允许计算两条规则。
  2. 按规则导出设备清单:异步任务。
  3. 计数器机制:关于推送、黑名单卸载、launcher广告位推送计数器?规则本身不设置数量限制,因为一条可以关联多个业务,一个业务可以关联多个规则,而数量限制一般是限制单个业务。

核心概念:文档中心 | 机顶盒请求 | 五、审批与一致性 (规则引擎)

五、审批与一致性 (规则引擎)

若规则关联到需要审批的业务,则该规则在 rule_business (规则关联业务表) 中只能绑定一个业务实体,不可复用。以下机制在此前提下生效:

  1. 被规则表关联的 rule_mac_resource 资源,不可再被其他规则关联。
  2. 审批触发与锁定:
    • 当以下任一数据发生修改:rule_mac_resource_item(MAC资源关联MAC)、rule_mac_item(规则关联MAC表)、rule_channel_item(规则关联渠道表)、rule_business(规则关联业务表),即触发审批。
    • 规则表将关联数据的状态字段更新为“待审批相关”,并通过 MQ 将消息推送到对应 businessType 的主题。
    • 规则引擎订阅 BPM 模块的流程状态变更消息以更新规则表整体状态;若该规则关联的业务处于审批中,则其子数据(MAC列表、渠道列表、业务绑定)一律锁定,禁止修改。
  3. 业务系统订阅第 2 步的消息后,将业务表相关字段同步标记为“待审批相关”。
  4. 业务系统按流程提交审批;审批通过后,规则引擎订阅 BPM 的 MQ 消息进行数据库状态更新为审批通过并刷新 Redis 缓存,确保现网数据一致性。
AI 问答