美文网首页
消息网关(一)-- 开发设计

消息网关(一)-- 开发设计

作者: 天草二十六_简村人 | 来源:发表于2022-11-15 15:51 被阅读0次

    一、背景

    作为公司的基础服务之一,发送消息是必不可少的功能之一,包括发送手机短信、企业微信、钉钉消息和电子邮件等。

    二、目标

    • 1、支持多种消息类型,包括手机短信、企业微信、钉钉消息和电子邮件等。
    • 2、同一类型的消息发送,需支持多个发送渠道。比如发送短信,既支持阿里云短信,也支持华为云短信等其他三方渠道。
    • 3、保证渠道的高可用,防止某个渠道被停用的时候(可能是欠费、也可以是封禁等外部原因),可以快速切换至其他可用渠道。
    • 4、业务方对接发送渠道,需要做到便捷,快速接入。

    三、数模设计

    image.png

    四、业务对接流图

    image.png

    五、关键术语

    1、消息类型

    指的是短信、企业微信、电子邮件等。

    2、短信模板

    消息平台定义好合法的短信模板,明确定义模板变量和编号,然后到第三方渠道申请短信模板。

    image.png
    • mapping字段:支持的第三方渠道类型及模板号,这里设计它的数据格式为json,方便扩展。

    数据结构示例:

    /* 平台的短信编号是SMS_0001,
    短信类型区分验证码类和通知类,
    这里维护的第三方模板编号包括阿里云和华为云 
    */
    {
        "_id" : ObjectId("5fab859e2073d196c7c175bf"),
        "type" : "VERIFY",
        "name" : "验证码",
        "code" : "SMS_0001",
        "content" : "您的验证码:${code},十分钟内有效。",
        "mapping" : "{\"SMS_ALIYUN\":\"SMS_205443030\",\"SMS_HUAWEIYUN\":\"ff5ba781be91472cac79178d1132df88\"}",
        "remark" : "",
        "createTime" : ISODate("2020-12-23T00:00:00.000Z"),
        "createBy" : "1",
        "modifiedTime" : ISODate("2020-12-23T00:00:00.000Z"),
        "modifiedBy" : "1"
    }
    
    image.png

    3、渠道

    渠道,也作第三方渠道,上层是应用(和渠道是一对多的关系)。

    查询条件包括:消息类型和应用ID

    // 查询应用是zpms,消息类型是手机短信的渠道列表
    db.getCollection('channel').find({   
     "supportMessageType" : "SMS",   
     "applicationId" : "zpms", 
     })
    

    属性设计说明:

    • channelId : 主键ID,不能重复
    • applicationId:对应application中的applicationId
    • enabled:开关
    • supportMessageType:消息类型:SMS-短信,EMAL-电子邮件,WX-企业微信。
    • providerId: 包括SMS_ALIYUN、SMS_HUAWEIYUN等,对应的是第三方渠道的简称。在定义短信模板的时候,sms_template.mapping字段里的key就是对应该字段。
    • properties:渠道的属性,为了可扩展性好,存储的格式是json,不会因为不同的渠道属性不一样而设计成了一张宽表。


      image.png

    4、应用

    区分不同的签名,一个企业对应一个应用。当是发送短信的时候,应用的名称就是签名。

    image.png

    六、接口设计

    1、消息发送记录

    image.png

    2、发送消息

    // account 是手机号、邮箱等账号
    // applicationId 对应application中的applicationId
    // payload 传入消息模板的变量及值,json格式支持多个
    // templateCode 模板编号
    // subject 消息主题,类似于模板名称、邮件主题
    
    {
      "messageType": "SMS",
      "subject": "验证码",
      "templateCode":"SMS_0001",
      "payload": "{\"code\":\"123456\"}",
      "account": "150xxxxxxx",
      "applicationId": "zpms"
    }
    

    相关文章

      网友评论

          本文标题:消息网关(一)-- 开发设计

          本文链接:https://www.haomeiwen.com/subject/yfydxdtx.html