--- /dev/null
+
+# 基于RabbitMQ的数据推送队列使用说明
+
+[TOC]
+
+## 说明
+
+本文档相关对接,须:
+
+* 依赖 用户服务 user-data-service,1.1.5-RELEASE 及以上版本
+
+* 依赖 同步服务 jobs-server 下的 rabbitmq-server
+
+* user-data-service-goa,须开启「推送数据到 jobs-server」
+
+
+## 数据
+
+数据格式为字符串
+
+内容为 json 格式,可以转换为 json 对象进行使用
+
+### 数据模型
+
+* 字典类型 DictionaryType
+
+```
+{
+ "id": String, // ID
+ "code": String, // 字典类型代码
+ "name": String, // 字典类型名称
+ "enable": Boolean, // 是否启用
+ "sort": Long // 排序
+}
+```
+
+* 字典 Dictionary
+
+```
+{
+ "id": String, // ID
+ "dictionaryType": <ref DictionaryType>, // 字典类型
+ "code": String, // 字典代码
+ "name": String, // 字典名称
+ "parentDictionary": <ref Dictionary>, // 父字典
+ "enable": Boolean, // 是否启用
+ "sort": Long // 排序
+}
+```
+
+* 身份类型 IdentityType
+
+```
+{
+ "id": String, // ID
+ "code": String, // 身份类型代码
+ "name": String, // 身份类型名称
+ "parentIdentityType": <ref IdentityType>, // 父身份类型
+ "enable": Boolean, // 是否启用
+ "sort": Long // 排序
+}
+```
+
+* 组织机构 Organization
+
+```
+{
+ "id": String, // ID
+ "code": String, // 组织机构代码
+ "name": String, // 组织机构名称
+ "description": String, // 组织机构描述
+ "type": <ref Dictionary>, // 组织机构部门类型
+ "isRootOrganization": Boolean, // 是否根组织机构
+ "rootOrganizationId": String, // 所属的根组织机构
+ "parentOrganization": <ref Organization>, // 所属的父级组织机构
+ "enable": Boolean, // 是否启用
+ "sort": Long // 排序
+}
+```
+
+* 用户 User
+
+```
+{
+ "id": String, // ID
+ "uid": String, // 人员编号
+ "passWord": String, // 账号密码
+ "ldapUserPassword": String, // 账号密码(LDAP同步用)
+ "name": String, // 姓名
+ "fullNameSpelling": String, // 姓名全拼
+ "nameSpelling": String, // 姓名简拼
+ "certificateType": <ref Dictionary>, // 证件类型,字典
+ "certificateNumber": String, // 证件号码
+ "gender": <ref Dictionary>, // 性别,字典
+ "nation": <ref Dictionary>, // 民族,字典
+ "country": <ref Dictionary>, // 国家,字典
+ "address": <ref Dictionary>, // 地区,字典
+ "phoneNumber": String, // 手机号码
+ "email": String, // 邮箱
+ "imageUrl": String // 个人照片地址
+}
+```
+
+* 帐号 Account
+
+```
+{
+ "id": String, // ID
+ "user": <ref User>, // 人员基本信息
+ "accountName": String, // 账号名
+ "identityType": <ref IdentityType>, // 身份,身份类型
+ "organization": <ref Organization>, // 所属组织机构
+ "state": <enum>, // 账户状态,NORMAL:正常,FREEZE:冻结,WRITTENOFF:注销
+ "accountExpiryDate": Date, // 账户有效日期[yyyy-MM-dd]
+ "userUid": String, // 人员编号(冗余)
+ "userName": String, // 姓名(冗余)
+ "certificateType": <ref Dictionary>, // 证件类型(冗余),字典
+ "certificateNumber": String, // 证件号码(冗余)
+ "gender": <ref Dictionary>, // 性别(冗余),字典
+ "nation": <ref Dictionary>, // 民族(冗余),字典
+ "country": <ref Dictionary>, // 国家(冗余),字典
+ "address": <ref Dictionary>, // 地区(冗余),字典
+ "phoneNumber": String, // 手机号码(冗余)
+ "email": String // 邮箱(冗余)
+}
+```
+
+* 同步密码 SyncPassword
+
+```
+{
+ "account": <ref Account>, // 帐号
+ "password": String // 密码(明文)
+}
+```
+
+
+## RabbitMQ 服务地址
+
+```
+host: rabbitmq-server.jobs-server.svc.cluster.local
+port: 5672
+username: guest
+password: guest
+```
+
+注:host 地址视具体部署情况确定,一般使用上述 k8s 集群内地址即可
+
+
+## 交换机 Exchange
+
+模式:发布/订阅,fanout
+
+详见:`https://www.rabbitmq.com/tutorials/tutorial-three-java.html`
+
+业务说明:
+
+* 用户服务作为数据发布者,会将 组织机构、帐号、密码等数据的变更事件,以消息的方式 发布到 RabbitMQ 中
+
+* 数据消费方,只须订阅这些消息,将 交换机 与 队列 进行绑定,然后进行监听,接收数据进行处理即可。
+
+
+
+
+### 交换机清单
+
+* 组织机构保存
+
+交换机名称,`jobs.fanout.exchange.organization-userSvc-2-jobs-save`
+
+数据,组织机构 Organization
+
+**可依据 code 组织机构代码,作为唯一标识,用于判定数据是否在目标应用存在**
+
+
+* 组织机构删除
+
+交换机名称,`jobs.fanout.exchange.organization-userSvc-2-jobs-delete`
+
+数据,组织机构 Organization
+
+
+* 帐号保存
+
+交换机名称,`jobs.fanout.exchange.account-userSvc-2-jobs-save`
+
+数据,帐号 Account
+
+**可依据 accountName 帐号名,作为唯一标识,用于判定数据是否在目标应用存在**
+
+
+* 帐号删除
+
+交换机名称,`jobs.fanout.exchange.account-userSvc-2-jobs-delete`
+
+数据,帐号 Account
+
+
+* 帐号密码修改
+
+交换机名称,`jobs.fanout.exchange.account-userSvc-2-jobs-reset-password`
+
+数据,帐号 Account
+
+**可用于 OpenLDAP 密码的更新**
+
+
+* 明文密码同步
+
+交换机名称,`jobs.fanout.exchange.account-userSvc-2-jobs-sync-password`
+
+数据,同步密码 SyncPassword
+
+**可将明文密码同步到第三方应用**
+