admin
2020-12-25 25680e135b5bdc15658622cbfde74bab73cfee77
service-lucky/src/main/java/com/ks/lucky/util/mq/CMQManager.java
@@ -1,10 +1,18 @@
package com.ks.lucky.util.mq;
import com.google.gson.Gson;
import com.ks.lucky.pojo.DTO.ActivityDrwanOutDateMsg;
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
import com.ks.lucky.pojo.DTO.mq.ActivityAssistMsgDTO;
import com.ks.lucky.pojo.DTO.mq.ActivityDrawnMsgDTO;
import com.ks.lucky.pojo.DTO.mq.ActivityJoinMsgDTO;
import com.ks.lucky.pojo.DTO.mq.ActivityStateChangeMsgDTO;
import com.ks.lucky.utils.LuckyCMQConstant;
import com.qcloud.cmq.Message;
import org.yeshi.utils.CMQUtil;
import org.yeshi.utils.JsonUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -17,11 +25,23 @@
    private static CMQManager cmqManager;
    private static CMQUtil cmqUtil;
    public static String QUEUENAME_LUCKY_ACTIVITY = "lucky-activity";
    /**
     * 需要执行领奖过期
     */
    public static String QUEUENAME_LUCKY_ACTIVITY_DRAWN_OUTDATE_EXEC = "lucky-activity-drawn-outdate-exec";
    static {
        cmqUtil = CMQUtil.getInstance(secretId, secretKey);
        // 最大消息为1M
        cmqUtil.createQueue(QUEUENAME_LUCKY_ACTIVITY, 1024 * 1024);
        cmqUtil.createQueue(QUEUENAME_LUCKY_ACTIVITY_DRAWN_OUTDATE_EXEC, 1024 * 1024);
        //创建主题
        cmqUtil.createTopic(LuckyCMQConstant.TOPIC_ACTIVITY_STATE_CHANGE);
        cmqUtil.createTopic(LuckyCMQConstant.TOPIC_ASSIST);
        cmqUtil.createTopic(LuckyCMQConstant.TOPIC_ACTIVITY_DRAWN);
        cmqUtil.createTopic(LuckyCMQConstant.TOPIC_ACTIVITY_JOIN);
    }
    public static CMQManager getInstance() {
@@ -51,6 +71,7 @@
    public void addActivityMsg(ActivityMQMsg msg) {
        cmqUtil.sendMsg(QUEUENAME_LUCKY_ACTIVITY, new Gson().toJson(msg));
    }
    /**
     * 活动消息消费
@@ -83,4 +104,89 @@
    }
    /**
     * 添加活动过期消息
     *
     * @param msg
     */
    public void addActivityDrawnOutDateMsg(ActivityDrwanOutDateMsg msg) {
        cmqUtil.sendMsg(QUEUENAME_LUCKY_ACTIVITY_DRAWN_OUTDATE_EXEC, new Gson().toJson(msg));
    }
    /**
     * 消费活动中奖过期消息
     *
     * @param count
     * @return
     */
    public Map<String, ActivityDrwanOutDateMsg> consumeActivityDrawnOutDateMsg(int count) {
        List<Message> list = cmqUtil.recieveMsg(count, QUEUENAME_LUCKY_ACTIVITY_DRAWN_OUTDATE_EXEC);
        if (list == null) {
            return null;
        }
        Map<String, ActivityDrwanOutDateMsg> map = new HashMap<>();
        Gson gson = new Gson();
        for (Message msg : list) {
            String result = msg.msgBody;
            map.put(msg.receiptHandle, gson.fromJson(result, ActivityDrwanOutDateMsg.class));
        }
        return map;
    }
    /**
     * 删除活动中奖过期消息
     *
     * @param receiptHandle
     */
    public void deleteActivityDrawnOutDateMsg(String receiptHandle) {
        cmqUtil.deleteMsg(QUEUENAME_LUCKY_ACTIVITY_DRAWN_OUTDATE_EXEC, receiptHandle);
    }
    /**
     * 发布活动状态改变的订阅消息
     *
     * @param dto
     */
    public void publishActivityStateChangeMsg(ActivityStateChangeMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_STATE_CHANGE);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_STATE_CHANGE, tagList, JsonUtil.getSimpleGson().toJson(dto));
    }
    /**
     * 发布活动助力的订阅消息
     *
     * @param dto
     */
    public void publishActivityAssistMsg(ActivityAssistMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ASSIST);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ASSIST, tagList, JsonUtil.getSimpleGson().toJson(dto));
    }
    /**
     * 发布活动中奖消息到订阅消息
     *
     * @param dto
     */
    public void publishActivityDrawnMsg(ActivityDrawnMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_DRAWN);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_DRAWN, tagList, JsonUtil.getSimpleGson().toJson(dto));
    }
    /**
     * 活动参与信息
     * @param dto
     */
    public void publishActivityJoinMsg(ActivityJoinMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_JOIN);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_JOIN, tagList, JsonUtil.getSimpleGson().toJson(dto));
    }
}