# 消息 SDK

# 准备

登录云原生应用管理平台。注册用户,创建单位,购买应用。

# 引入消息 SDK 依赖包

maven 方式,在 pom 文件中添加如下配置:

<dependency>
  <groupId>cn.com.zstars</groupId>
  <artifactId>cloud-message-spring-boot-starter</artifactId>
  <version>1.0.4</version>
</dependency>

# 添加消息服务配置

在自己开发环境配置中增加如下配置参数: 测试环境

cloudmessage.name-server=47.110.90.170:19876

# 使用步骤

前提:已购买应用并获得应用 key

  • 实现 CloudMessageListener 接口;

  • 实现类上添加注解@EnableCloudMessageListener;

  • 设置注解参数中的 topic 和 consumerGroup,格式如下:

topic:“topic_zstar-”+ 应用 key

consumerGroup:“group_”+ 应用 key

  • 在实现类的 onMessage 方法中处理具体消息消费逻辑;

方法 onMessage 中参数 CloudMessage 描述:

属性名称 属性描述
getMsgId 消息 ID,用于唯一标识一条消息
getTags 用户区分具体消息类型
getMessageBody 具体消息所发送的内容

消息 tags 类型表述:

属性名称 属性描述
tag_app_add 购买应用时发送的消息
tag_app_del 退订应用时发送的消息
tag_app_distribute 分发应用时发送的消息
tag_app_send 应用分配时发送的消息
tag_app_user_role_upd 应用用户角色分配时发送的消息
tag_style_add 增加卡片样式时发送的消息
tag_style_upd 更新卡片样式时发送的消息
tag_style_del 删除卡片样式时发送的消息
tag_module_add 增加卡片维度时发送的消息
tag_module_upd 更新卡片维度时发送的消息
tag_module_del 删除卡片维度时发送的消息
tag_meta_data_add 增加数据字段时发送的消息
tag_meta_data_upd 更新数据字段时发送的消息
tag_meta_data_del 批量删除数据字段时发送的消息
tag_org_import 租户导入时发送的消息
tag_org_add 新增租户时发送的消息
tag_org_upd 修改单位信息时发送的消息
tag_org_del 删除租户时发送的消息
tag_dict_add 新增字典数据时发送的消息
tag_dict_del 删除字典数据时发送的消息
tag_user_add 用户加入单位通过审核时发送的消息
tag_user_del 删除用户时发送的消息
tag_user_upd 用户更新信息发送的消息
tag_user_ban 用户账户停用发送的消息
tag_user_import 用户信息导入时发送的消息
tag_dep_user_add 创建部门用户关系时发送的消息
tag_dep_user_upd 修改部门用户关系时发送的消息
tag_dep_user_del 删除部门用户关系时发送的消息
tag_dep_add 创建部门时发送的消息
tag_dep_upd 更新部门时发送的消息
tag_dep_del 删除部门时发送的消息
tag_job_add 创建岗位时发送的消息
tag_job_upd 创建或修改岗位时发送的消息
tag_job_del 删除岗位时发送的消息
tag_org_upd 修改单位信息时发送的消息
tag_group_tenant_leaf_del 集团移除租户
tag_group_tenant_move 集团租户位置移动
tag_group_disband 集团解散
tag_group_apply_check 集团租户批量审核
tag_group_join_tenants 集团租户批量加入
tag_group_upd 集团信息修改
tag_group_add 集团信息新增
tag_group_tenant_father_upd 批量调整租户上级
tag_master_unit 主单位设置时发送的信息

# tag_app_add 消息内容描述:

属性名称 属性描述
appId 购买的应用 ID
tenantId 租户 code

# tag_app_distribute 消息内容描述:

属性名称 属性描述
appIds 购买的应用 ID 字符串
tenantIds 租户 code 字符串,多个值用“,”号分割
tenantCode 租户编码
groupId 集团id

# tag_app_del 消息内容描述:

属性名称 属性描述
tenantId 租户id
appIds 购买的应用 ID 字符串
groupId 集团id

# tag_app_send 消息内容描述:

属性名称 属性描述
tenantCode 租户代码

# tag_org_import 消息内容描述:

属性名称 属性描述
tenantCode 租户代码

# tag_org_add 消息内容描述:

属性名称 属性描述
tenantCode 租户代码
id 租户Id
tenantName 租户名
socialCreditCode 社会统一信用代码

# tag_app_user_role_upd 消息内容描述:

属性名称 属性描述
roleId 角色id
roleName 角色名称

# tag_user_add 消息内容描述:

属性名称 属性描述
id 用户 ID
phoneNumber 用户电话号码
tenantCode 租户编码
realName 用户姓名
idCard 身份证号
roleIds 角色ID

# tag_user_upd 消息内容描述:

属性名称 属性描述
id 用户 ID
phoneNumber 用户电话号码
tenantCode 租户编码
realName 用户姓名
userId 用户Id
userCode 员工编号
genderName 性别

# tag_user_del 消息内容描述:

属性名称 属性描述
userIds 用户 id 字符串,多个值用“,”号分割
tenantCode 租户编码

# tag_user_ban 消息内容描述:

属性名称 属性描述
users 租户集合
tenantCode 租户编码

# tag_dep_user_add 消息内容描述:

属性名称 属性描述
id 部门 ID
parentId 上级部门 ID
userIds 用户 id 字符串,多个值用“,”号分割
tenantCode 租户编码
agencyName 部门名称
agencyCode 部门代码

# tag_dep_user_upd 消息内容描述:

属性名称 属性描述
deptId 部门 ID
deptName 部门名称
pId 上级部门 id
userIds 用户 id 字符串,多个值用“,”号分割
tenantCode 租户编码
agencyCode 部门代码

# tag_job_add 消息内容描述:

属性名称 属性描述
jobId 岗位Id
tenantCode 租户编码
jobName 岗位名称
userIds 用户Id集合

# tag_dep_del 消息内容描述:

属性名称 属性描述
ids 内设机构Id
tenantCode 租户编码

# tag_job_upd 消息内容描述:

属性名称 属性描述
userIds 用户 ID 字符串,多个值用“,”号分割
jobName 岗位名称
jobId 岗位ID
tenantCode 租户编码
delUserIds 删除用户ID字符串,多个值用“,”号分割

# tag_job_del 消息内容描述:

属性名称 属性描述
jobId 岗位ID
jobName 岗位名称
tenantCode 租户编码

# tag_org_upd 消息内容描述:

属性名称 属性描述
id 单位 ID
province 省(单位地址)
city 市(单位地址)
contact 区(单位地址)
streetAddress 详细地址(单位地址)
unitName 单位名称
linkPhone 联系方式
logo 单位 logo
socialCreditCode 统一社会信用代码

# tag_group_tenant_leaf_del 消息内容描述:

属性名称 属性描述
groupId 集团 id
tenantIds 租户id,多个id用,号分割
tenantCode 租户Code

# tag_group_tenant_move 消息内容描述:

属性名称 属性描述
groupId 当前集团 id
tenantIds 租户id,多个id用,号分割
sourceGroupId 整颗树的源集团id
tenantCode 租户Code

# tag_group_apply_check 消息内容描述:

属性名称 属性描述
tenant 租户对象
groupId 集团 id
tenantCode 租户Code

# tag_group_join_tenants 消息内容描述:

属性名称 属性描述
tenant 租户对象
groupId 集团 id
sourceGroupId 整颗树的源集团id
tenantCode 租户Code

# tag_group_add 消息内容描述:

属性名称 属性描述
groupId 集团id
shape 形状(创建实集团时传入)
groupName 集团名称
tenantCode 租户Code
groupDescription 集团描述
groupCode 集团编码(创建实集团时传入)

# tag_group_upd 消息内容描述:

属性名称 属性描述
parentGroupId 父级集团id
sonGroupId 集团id
groupName 集团名称
tenantCode 租户Code
groupDescription 集团描述

# tag_group_tenant_father_upd 消息内容描述:

属性名称 属性描述
groupId 集团id
tenantIds 租户id,多个id用,号分割
tenantCode 租户Code

# tag_job_upd 消息内容描述:

属性名称 属性描述
phoneNumber 手机号码
unitId 单位id
tenantCode 租户编码

#

# 示例代码

package com.zstars.zams.jianguan.consumer;

import com.assetcloud.message.center.annotation.EnableCloudMessageListener;
import com.assetcloud.message.center.core.CloudMessageListener;
import com.assetcloud.message.center.entity.CloudMessage;
import com.platform.meta.core.orm.mapper.BaseDataMapper;
import com.zstars.common.util.LogUtils;
import com.zstars.common.util.RecidUtil;
import com.zstars.core.workfow.config.SpringContext;
import com.zstars.zams.jianguan.service.ConsumerListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.nio.charset.Charset;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description: 消息监听
 * @author: lin
 * @create: 2020/04/08 11:33
 */
@Component
@EnableCloudMessageListener(topic = "topic_zstar-${cloudmessage.app-key}",
        consumerGroup = "group_${cloudmessage.app-key}")
public class BaseConsumerListener implements CloudMessageListener<CloudMessage> {
    @Autowired
    private BaseDataMapper baseDataMapper;

    @Override
    public void onMessage(CloudMessage messageExt) {
        //幂等
        if (selectMessage(messageExt)) {
            return;
        }
        Long recId = RecidUtil.newRecid();
        //落地
        floorMessage(messageExt, recId);

        String tags = messageExt.getTags();
        ConsumerListener consumerListener = (ConsumerListener) SpringContext.getBean("topic_zstar_" + tags);
        try {
            consumerListener.onMessage(messageExt);
        } catch (Exception e) {
            e.printStackTrace();
            updMessage(recId, "0");
            return;
        }
        //更新1->2
        updMessage(recId, "2");
    }

    public void floorMessage(CloudMessage messageExt, Long recId) {
        Map<String, Object> item = new HashMap<>(7);
        item.put("tableName", table);
        item.put("recId", recId);
        item.put("createTime", new Date());
        item.put("mesId", messageExt.getMsgId());
        item.put("mesBody", messageExt.getMessageBody());
        item.put("status", "0");
        item.put("overTime", new Date());
        baseDataMapper.insert(item);
    }

    public boolean selectMessage(CloudMessage messageExt) {
        Map<String, Object> item = new HashMap<>(2);
        item.put("mesId", messageExt.getMsgId());
        List<Map<String, Object>> list = baseDataMapper.findAll(item);
        if (!list.isEmpty()) {
            return true;
        }
        return false;
    }

    public void updMessage(Long recId, String status) {
        Map<String, Object> item = new HashMap<>(2);
        item.put("recId", recId);
        item.put("status", status);
        baseDataMapper.updateByPrimaryKey(item);
    }

}
Last Updated: 3/10/2022, 10:39:52 PM