服务配置
在部署 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
推送平台配置;message
APP 消息配置;wx
微信公众号配置。
Push 子项
各种推送平台的配置,每个推送平台都包含这些配置项,它们用于限流器:
enabled
是否启用该推送平台count
在每个限流周期之内,最多可以进行多少次推送请求;interval
限流周期的长度,单位是毫秒;batchSize
每次推送时,从存放等待推送的消息队列中,取出的消息数量上限;maxDevicesCount
推送平台的批量推送所允许的最大设备数量。一般情况下,除非推送平台接口升级,该参数应保持默认值,否则将导致推送失败。
除此以外,还有一些公共的配置:
multi-device
是否开启多设备支持,如果开启,一些只能按用户推送的推送平台将被禁用。user-prefix
一些按用户推送的平台,需要注册平台用户,在这里配置某些特定类型的用户使用的前缀。default-title
如果推送消息没有标题,使用这个配置项作为默认标题。
我们以 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。
appid
微信公众号的 APP ID,在微信公众号管理后台可以获取;secret
微信公众号 Secret,在微信公众号管理后台可以获取;token
微信公众号 Token,可以自己指定,和微信公众号管理后台一致。
已知问题
对于华为推送平台,因华为的推送逻辑变更,我们在原本的基础上做了一些调整,所以目前存在一个问题。在配置华为推送平台时需要注意。
当您对华为设备发出通知栏推送之后,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 主机为
redis.hzero.org
- 默认的 Redis 端口为
6379
- 默认的 Zookeeper 地址为
zookeeper-0:2181
- 可以使用环境变量
REDIS_DEFAULT_URL
或者启动参数-Dspring.redis.host
来覆盖 Redis 主机配置; - 可以使用环境变量
REDIS_DEFAULT_PORT
或者启动参数-Dspring.redis.port
来覆盖 Redis 端口配置; - 可以使用环境变量
SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES
或者启动参数-Dspring.cloud.stream.kafka.binder.zkNodes
来覆盖 Zookeeper 地址配置。
大多数情况下,只需要配置 Redis 和 Zookeeper 即可使用 MPush。
需注意,MPush SDK 不能读取 Spring 的配置项。请必须通过修改此配置文件,或环境变量,或启动参数来完成 MPush 配置。
调度任务配置
执行器配置(自动):
调度任务配置: