消息推送说明
一、推送方式
阿里巴巴开放平台向接入商推送实时的业务变更消息,保持数据的一致性以及同步,满足接入商业务需求,避免轮询。推送的数据消息,将以http post或者websocket的方式向该推送地址发起调用,把数据推送给接入商。接入商如果通过SDK方式接收消息,在成功收到后,SDK会自动发送回执,如果自己接收消息,则需要自行发送回执。接收失败时,消息中心会自动重发N次(一般3次)。如果还是失败,则将消息保存入库,接收方可通过补偿API来拉取接收失败的消息。失败消息一般保存7天,请及时拉走,否则消息会被丢弃。
二、推送消息格式
消息数据以Json格式发送,消息提供统一的模板;不同业务的消息,仅通过消息类型来区分,具体的业务消息内容,参考各个业务消息说明。
1、消息模板字段说明
属性 | 类型 | 说明 | 备注 |
msgId | Number | 消息ID,消息唯一性标识 | 如210239 |
gmtBorn | Number | 消息推送时间 | 1970.1.1到现在的毫秒数 |
data | String | 具体推送的业务消息数据,json格式,字段说明,参考各个业务消息说明 | 如{"key1":"value1"} |
userInfo | String | memberId | 1234567 |
type | String | 消息类型,每个业务消息都唯一对应一个类型,参考业务消息的类型定义 | ORDER_PAY |
extraInfo | String | 扩展字段,暂未启用 | 如{"key1":"value1"} |
消息模板json示例
{
"msgId": "12345",
"gmtBorn": "1392711616045",
"data": {
"key1": "value1"
},
"userInfo": "memeberId",
"type": "messageType"
}
2、业务消息字段示例说明
示例:订单状态变化消息
消息业务说明: 订单状态发生变化的消息推送
消息类型: ORDER_STATUS_CHANGE
业务消息内容:
属性 | 类型 | 说明 | 备注 |
orderID | Number | 订单产品ID | |
lastStatus | String | 上一次订单状态 | |
currentStatus | String | 当前订单状态 | |
msgSendTime | Date | 消息发送时间 | 消息发送的时间 |
userInfo | String | 用户登录id | 卖家memberId |
消息内容示例
message = {
"data": {
"currentStatus": "FINISH",
"lastStatus": "FUND_PROCESSING",
"orderChangeTime": "2015-06-24 19:33:26",
"orderId": "60020931694988"
},
"userInfo": "cn1803950",
"type": " ORDER_STATUS_CHANGE ",
}
三、推送通道说明
1、httpCallback
通道说明:
http消息回调通道,isv提供一个http服务,配置url地址;开放平台采用短连接的方式调用http服务,推送消息
推送协议说明:
开放平台推送中心发送post请求,包含两个参数,编码格式统一为UTF-8,统一按照key/value格式推送,参数说明:
参数键值 | 参数值 | 说明 | 备注 |
message | 消息的json串 | 对接方获取这个参数的值,然后通过json的反序列化,就得到了消息模型 | 如210239 |
_aop_signature | 签名 | 针对消息的一个签名,可防篡改 | 1970.1.1到现在的毫秒数 |
消息签名说明
仅对消息内容进行签名计算,签名算法同开放平台的算法,内容是key+value(即message+json串)
消息签名算法示例
# key=message
# value= message对应的json串
String[] datas = new String[1];
datas[0] = key + value;
byte[] signature = SecurityUtil.hmacSha1(datas, toBytes(appSecretKey));
return encodeHexStr(signature);
http 推送POST请求示例:
POST /pushMessage HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Connection: close
Accept: */*
User-Agent: NING/1.0
Content-Length: 248
message={"data":{"key":"value"},"gmtBorn":1527556000,"msgId":70299002,"type":"PRODUCT_PRODUCT_EXPIRE","userInfo":"CBU_MemberId"}&_aop_signature=65F2AA13AE9C9C9DFE8682EFB90B32F37CB01BE1
推送成功说明
isv收到消息之后,只要设置返回的response http status code =200就认为是消息消费成功; 如果http status code!=200,就认为是消息消费失败,推送中心后续会重试,默认重试3次
2、websocket
通道说明:
websocket协议消息推送,isv提供一个websocket客户端(可集成SDK),主动连接到开放平台,并保持长连接;开放平台通过长连接推送消息,客户端消费完成后,需要主动确认消息消费完成(SDK可自动解决)
推送协议说明:
websocket协议类型 | 含义说明 | 备注 |
CONNECT | 客户端发起建连请求 | 客户端发起的长连接请求,http协议升级为websocket |
CONNECT_ACK | 服务端建连成功返回 | 服务端websocket握手成功返回,双向确认链接 |
HEARTBEAT | 客户端心跳 | 每间隔30s发送一次心跳包 |
SERVER_PUSH | 服务端消息推送(最关心的) | 客户端需要自定义业务逻辑,来处理推送的消息 |
CONFIRM | 客户端消息消费成功确认 | 消息消费成功标志,服务端依据此信息来判断 |
CLOSE | 链接关闭 | |
SYSTEM | 服务端异常 |
由于websocket协议复杂,强烈推荐使用SDK来集成,减少开发成本,不用关心连接维护,心跳等复杂问题,只需要处理消息的逻辑;后续会慢慢补充协议完整信息
四、消息补偿API
针对推送失败的消息,我们提供补偿API机制,让isv能够主动来查询失败消息列表,做一些补偿的逻辑。
提供两种方式:
1、游标式获取失败的消息列表:
游标式获取失败的消息列表,获取的消息默认自动会做消费成功的确认。所以下次以相同条件调用获取的是剩下的数据,直至返回数据为空。
游标式获取失败的消息列表API:
https://www.cnsecc.com/doc_29486412.html
2、查询式获取失败的消息列表:
查询式获取发送的消息列表,获取的消息不会自动确认消费成功的状态,需要调用方手动调用确认api来确认。需注意,确认后,会影响分页返回的数据
查询式获取失败的消息列表API:
https://www.cnsecc.com/doc_29486420.html
失败消息批量确认Api:
https://www.cnsecc.com/doc_29486404.html
推荐
-
-
QQ空间
-
新浪微博
-
人人网
-
豆瓣