# Tigris **Repository Path**: bxdTechCenter/Tigris ## Basic Information - **Project Name**: Tigris - **Description**: Tigris (底格里斯河),两河流域文明,代表了通用队列 海量、消峰、海纳百川的特点。 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-11-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Tigris Tigris (底格里斯河),两河流域文明,代表了通用队列 海量、消峰、海纳百川的特点。 ### 提交格式说明 【A|U|F】【module(相关模块)】【commit message(提交说明)】 > 示例: A libs 添加redis操作公共方法 * A - 添加功能 * U - 更新文档等 * F - 修复问题 ### 生产消息接口 > POST /message/post/ 请求参数 | 参数 | 必选 | 类型 | 说明 | |---|---|---|---| | topic | true | string | topic名称 | | object | true | string | 存储的数据 | 返回数据 | 参数 | 类型 | 说明 | | --- | --- | --- | | resultNum | int | 状态(成功为200,其他失败) | | resultMessage | string | 请求失败时的详细信息 | | resultData| string | 成功时为created,失败为空 | ### 消费消息接口 > GET /message/get/ 请求参数 | 参数 | 必选 | 类型 | 说明 | |---|---|---|---| | topic | true | string | topic名称 | | timeout | true | int | 确认消费的超时时间(单位秒,超时后重新回到队列),10 - 3600之间 | | limit | true | int | 一次消费的数据量1 - 32之间 | 返回数据 | 参数 | 类型 | 说明 | | --- | --- | --- | | resultNum | int | 状态(成功为200,其他失败) | | resultMessage | string | 请求失败时的详细信息 | | resultData| array | 返回数据 (由下列结构组成的数组) | | -- token | string | 确认消费回调凭证(详情见确认消费回调接口) | | -- object | string | 消费数据 | ### 消息确认消费回调接口 > GET /message/delete/ 请求参数 | 参数 | 必选 | 类型 | 说明 | |---|---|---|---| | topic | true | string | topic名称 | | token | true | string | 确认消费token(消费时返回的token) | 返回数据 | 参数 | 类型 | 说明 | | --- | --- | --- | | resultNum | int | 状态(成功为200,其他失败) | | resultMessage | string | 请求失败时的详细信息 | | resultData | string | 成功时为deleted,失败为空 | ### 签名算法 >名词解释: * app_id 服务端分配的唯一标识 * app_secret 服务端分配的唯一标识对应的密钥 * uri 请求接口的uri,例如 POST /push/ 接口,则uri为`/push/` * reqest_date 请求发生时间的10位时间戳 假设当前请求完整url为: http://127.0.0.1/push/?from=app&data=value, app_id为`app`,app_secret为`O4Yt13YdW2n7yyPEkDC7TL8UPcDUvOzh` 1. 添加app_id和request_date至请求参数 (`app_id: app, request_date: 1511865490`) 1. 按字母排序所有请求参数 (`app_id=app&data=value&from=app&request_date=1511865490`) 2. 把uri和排序后的参数用`?`连接 (`/push/?app_id=app&data=value&from=app&request_date=1511865490`) 3. 连接app_secret (`/push/?app_id=app&data=value&from=app&request_date=1511865490O4Yt13YdW2n7yyPEkDC7TL8UPcDUvOzh`) 4. md5加密连接后的字符串 (`d41d8cd98f00b204e9800998ecf8427e`) 5. 加密后的md5串作为sign参数的值,附加到原有的请求参数中 (最终请求: `http://127.0.0.1/push/?app_id=app&data=value&from=app&request_date=1511865490&sign=d41d8cd98f00b204e9800998ecf8427e`) ### 新版签名算法(防止重放攻击) >名词解释: * AppId 统一分配的唯一标示 * AppSecret 统一分配的与唯一标示配对的密钥 * Timestamp 当前的时间戳 * SignatureNonce 随机字符串 假设当前请求的完整请求为: `http://localhost/message/get/?topic=login&limit=1&timeout=300`,AppId为`api_deliver`,AppSecret为`12345678`则签名计算步骤如下: 1. 添加AppId、Timestamp和SignatureNonce至请求参数中 (`topic=login&limit=1&timeout=300&AppId=api_deliver&Timestamp=1517564053&SignaureNonce=e121a91b0053a04bb01559a4720a3980`)、 2. 按字母排序所有请求参数并urlencode编码 (`AppId=api_deliver&SignatureNonce=e121a91b0053a04bb01559a4720a3980&Timestamp=1517564053&limit=1&timeout=300&topic=login`) 3. 通过urlencode编码请求的URL (`%2Fmessage%2Fget%2F`) 4. 使用`&`符连接请求的Method、URL和参数(`GET&%2Fmessage%2Fget%2F&AppId=api_deliver&SignatureNonce=e121a91b0053a04bb01559a4720a3980&Timestamp=1517564053&limit=1&timeout=300&topic=login`) 5. 使用HMAC-SHA1算法AppSecret为密钥计算签名(`88a597ec16db72c47df6449958841d2229d023f5`) 6. 把计算的签名结果作为Signature参数的值附加到请求参数中(最终请求:`http://localhost/message/get/?topic=login&limit=1&timeout=300&AppId=api_deliver&Timestamp=1517564053&SignaureNonce=e121a91b0053a04bb01559a4720a3980&Signature=88a597ec16db72c47df6449958841d2229d023f5`)