• 服务配置

    在部署 APP 消息服务之前,需要进行一些配置。下文将介绍所需的配置项以及相关含义。

    application.yml 配置

    hippius:
      push:
        # 是否开启多设备支持
        # 开启(true): 不可使用按用户推送的推送平台,注册推送设备时保证设备ID唯一
        # 关闭(false):可以使用按用户推送的推送平台,注册推送设备时保证用户ID唯一
        multi-device: true
        user-prefix:
          group: group
        default-title: Hippius # 没有标题时,通知栏推送使用的标题
        mock:
          enabled: true
          count: 5           # 每个限流周期最大推送次数
          interval: 5000     # 限流周期间隔
          batchSize: 10000   # 推送线程单次读取的最大消息数
          maxDevicesCount: 1 # 调用一次推送接口所提供的设备数量上限
        mock-otot:
          enabled: true
          count: 10          # 每个限流周期最大推送次数
          interval: 10000    # 限流周期间隔
          batchSize: 3       # 推送线程单次读取的最大消息数
          maxDevicesCount: 5 # 调用一次推送接口所提供的设备数量上限
        mpush:
          enabled: ${PUSH_MUPSH_ENABLED:false}
          count: 1000
          interval: 200
          batchSize: 100
          maxDevicesCount: 9999999
        xiaomi:
          enabled:         ${PUSH_XIAOMI_ENABLED:true}
          count:           ${PUSH_XIAOMI_COUNT:50}
          interval:        ${PUSH_XIAOMI_INTERVAL:1000}
          batchSize:       ${PUSH_XIAOMI_BATCH_SIZE:100}
          maxDevicesCount: ${PUSH_XIAOMI_MAX_DEVICES_COUNT:10}
          appSecret:       ${PUSH_XIAOMI_APP_SECRET}
        jpush:
          enabled:         ${PUSH_JPUSH_ENABLED:true}
          count:           ${PUSH_JPUSH_COUNT:600}
          interval:        ${PUSH_JPUSH_INTERVAL:60000}
          batchSize:       ${PUSH_JPUSH_BATCH_SIZE:100}
          maxDevicesCount: ${PUSH_JPUSH_MAX_DEVICES_COUNT:1000}
          appKey:          ${PUSH_JPUSH_APP_KEY}
          masterSecret:    ${PUSH_JPUSH_MASTER_SECRET}
        huawei:
          enabled:         ${PUSH_HUAWEI_ENABLED:true}
          count:           ${PUSH_HUAWEI_COUNT:20}
          interval:        ${PUSH_HUAWEI_INTERVAL:1000}
          batchSize:       ${PUSH_HUAWEI_BATCH_SIZE:100}
          maxDevicesCount: ${PUSH_HUAWEI_MAX_DEVICES_COUNT:1000}
          appId:           ${PUSH_HUAWEI_APP_ID:100416529}
          appSecret:       ${PUSH_HUAWEI_APP_SECRET}
          appPkgName:      ${PUSH_HUAWEI_APP_PKG_NAME}
        rong-cloud:
          enabled:         ${PUSH_RONGCLOUD_ENABLED:true}
          count:           ${PUSH_RONGCLOUD_COUNT:100}
          interval:        ${PUSH_RONGCLOUD_INTERVAL:1000}
          batchSize:       ${PUSH_RONGCLOUD_BATCH_SIZE:1}
          maxDevicesCount: ${PUSH_RONGCLOUD_MAX_DEVICES_COUNT:100}
        rong-cloud-group:  # 融云群组消息限流
          enabled:         ${PUSH_RONGCLOUD_GROUP_ENABLED:true}
          count:           ${PUSH_RONGCLOUD_GROUP_COUNT:20}
          interval:        ${PUSH_RONGCLOUD_GROUP_INTERVAL:1000}
          batchSize:       ${PUSH_RONGCLOUD_GROUP_BATCH_SIZE:1}
          maxDevicesCount: ${PUSH_RONGCLOUD_GROUP_MAX_DEVICES_COUNT:3}
        netease:
          enabled:         ${PUSH_NETEASE_ENABLED:true}
          count:           ${PUSH_NETEASE_COUNT:120}
          interval:        ${PUSH_NETEASE_INTERVAL:60000}
          batchSize:       ${PUSH_NETEASE_BATCH_SIZE:100 }
          maxDevicesCount: ${PUSH_NETEASE_MAX_DEVICES_COUNT:500}
      message:
        app:
          richtextMsgUrl: ${RICHTEXT_MSG_URL:http://wechat.hand-china.com/hippiusarticle/?corpMessageId=:uuid}
          fileBucketName: ${RICHTEXT_MSG_BUCKET_NAME:hippius}
      wx:
        appid:  ${WECHAT_APPID}
        secret: ${WECHAT_SECRET}
        token:  ${WECHAT_TOKEN}
      im:
        rong-cloud:
          appKey:    ${IM_RONGCLOUD_APP_KEY}
          appSecret: ${IM_RONGCLOUD_APP_SECRET}
        netease:
          appKey:    ${IM_NETEASE_APP_KEY}
          appSecret: ${IM_NETEASE_APP_SECRET}
    

    本服务配置使用的前缀为 hippius,包含三个子项:

    Push 子项

    各种推送平台的配置,每个推送平台都包含这些配置项,它们用于限流器:

    除此以外,还有一些公共的配置:

    我们以 JPush 为例,来说明该配置代表的实际含义。

    count: 600
    interval: 60000
    batchSize: 100
    maxDevicesCount: 1000
    

    上面的参数表示:在 60000 毫秒,即 1 分钟之内,可以进行 600 次推送请求。每次从推送队列最多取出 100 条待推送的消息。对于同一条消息,每个推送请求最多可推送给 1000 台设备。

    其他配置项为推送时该平台所需的配置参数。配置项名称与官方一致,可参考各平台官方文档。

    Message 子项

    消息发送相关的配置。

    当前只有 hippius.message.app.richtextMsgUrl 一项,用于指定发送消息时生成的图文消息 HTML5 页面地址。其中 :uuid 会被替换成图文信息的 UUID。

    Wx 子项

    微信公众平台相关的配置,目前主要用于获取JS Ticket。

    已知问题

    对于华为推送平台,因华为的推送逻辑变更,我们在原本的基础上做了一些调整,所以目前存在一个问题。在配置华为推送平台时需要注意。

    当您对华为设备发出通知栏推送之后,APP 无法感知推送到达,也无法获取推送内容。所以在进行通知栏推送时,我们同时发送了透传推送。因此,每进行一次向华为设备发起的通知栏推送,实际将会产生两次推送行为。

    因系统当前架构设计制约,以及易用性和性能方面的考虑,我们难以实现针对华为推送平台的通知栏推送做双倍推送次数判断。也难以实现仅剩余一次可用次数时,停止进行通知栏推送并提前抢占下一个生效令牌,以完成本次推送的逻辑。

    在我们没有找到更好的解决方法之前,我们不对推送逻辑作出任何改动。此参数仅表示每个周期中可以触发多少次推送流程,而华为手机通知栏推送则会进行双倍请求

    因此,如果您明确得知华为推送平台的流量限制中的请求次数上限,请将它除以 2,然后再填入配置中。每周期进行的推送次数等于 count 参数的数值,这意味着华为推送将会比预想中要更慢一些。

    对于其他推送平台,因为 APP 可以感知通知栏推送,所以无需担心此问题。

    数据权限客户端配置

    数据库前缀

    登录管理后台,使用平台级角色,选择 云平台管理 > 系统管理 > 数据权限。
    首先配置前缀。点击“权限规则”选项卡,新建一条规则。租户选 Hzero平台,SQL填写 hzero_platform ,规则编码填写 PREFIX.HZERO_PLATFORM
    如图所示:

    权限规则示例

    然后在权限范围中,给下列表名配置该前缀:

    hpfm_tenant
    hipsplat_contact_tag_member
    hpfm_employee
    hpfm_employee_assign
    hpfm_employee_user
    hpfm_unit
    iam_user
    

    如图所示:

    权限范围示例

    MPush 配置

    MPush 不使用 Spring 框架的配置文件,而是自己独立使用一个配置文件。文件位于项目目录中的 resources/application.conf

    与 MPush 有关的配置请参考 这篇文档

    本项目自带一个默认配置:

    # 环境变量覆盖 Redis 服务器地址,要保证先后顺序
    temp.redis-host = "redis.hzero.org"
    temp.redis-host = ${?REDIS_DEFAULT_URL}
    temp.redis-host = ${?spring.redis.host}
    
    temp.redis-port = "6379"
    temp.redis-port = ${?REDIS_DEFAULT_PORT}
    temp.redis-port = ${?spring.redis.port}
    
    mp.zk.server-address = "zookeeper-0:2181"
    mp.redis.nodes = [${temp.redis-host}":"${temp.redis-port}]
    # netty 和 hzero-scheduler 有依赖冲突所以禁用了
    mp.core.epoll-provider = "nio"
    
    # 环境变量覆盖 Zookeeper 配置项
    mp.zk.server-address = ${?SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES}
    mp.zk.server-address = ${?spring.cloud.stream.kafka.binder.zkNodes}
    

    语义如下:

    大多数情况下,只需要配置 Redis 和 Zookeeper 即可使用 MPush。
    需注意,MPush SDK 不能读取 Spring 的配置项。请必须通过修改此配置文件,或环境变量,或启动参数来完成 MPush 配置。

    调度任务配置

    执行器配置(自动):

    执行器配置

    调度任务配置:

    调度任务配置