Skip to content
sika-code edited this page Jul 20, 2019 · 1 revision

mq【消息队列公共组件】

What

  • 消息队列公共组件

Why

  • 封装消息队列公共交互对象
  • 减少重复性工作
  • 规范消息队列交互方式

How

  • 封装通用的消息交互对象
  • 规范消息对象的生成规则
  • 规范消息对象的格式

mq组件使用说明

名称 备注
MqConfig 消息队列配置类
MqDataType 消息队列数据类型类
MqMsgGenerator 消息队列消息传输对象的创建者
MqMsgDTO 消息队列消息数据传输对象、简单情况下可以复用相同的队列处理不同类型的消息

示例

1 创建消息生成者的Bean

MqMsgGenerator [组件本身已提供生成者的条件化配置]

@Configuration
public class MqConfig {

    @Autowired
    private WorkspaceProperties workspaceProperties;

    /** 注入Mq消息数据传输对象生成者Bean */
    @Bean
    @ConditionalOnMissingBean
    public MqMsgGenerator mqMsgGenerator() {
        return new MqMsgGenerator()
                .setNoGenerator(NoFactory.createSecondShortOrder(workspaceProperties))
                ;
    }
}

2 注入MqMsgGenerator对象创建MqMsgDTO对象

public class RabbitSenderImpl implements RabbitSender {
    @Autowired
    private MqMsgGenerator msgGenerator;
    
    /**  
     * <p>
     * 转换为MsgDTO
     * </p>
     * @author daiqi  
     * @date 2019/7/15 11:02  
     * @param data : 传输的数据
     * @param dataType : 标识该数据的数据类型
     * @return com.lxzl.skull.mq.common.pojo.dto.MqMsgDTO  
     */  
    protected MqMsgDTO convertToMsgDTO(Object data, MqDataType dataType) {
        MqMsgDTO msgDTO;
        if (data instanceof MqMsgDTO) {
            msgDTO = (MqMsgDTO) data;
        } else {
            msgDTO = msgGenerator.generateMqMsg(data);
            msgDTO.setDataType(dataType);
        }
        return msgDTO;
    }
    
}

拓展

配置自定义MqMsgGenerator属性

  • 配置编号属性和编号生成器属性
sika:
  code:
    mq:
      msg:
        generator:
          no-properties:      # 配置编号属性
            prefix: MQN       # 编号前缀
            suffix-count: 6   # 编号后缀的数量
          no-generator:       # 配置编号生成器属性
            delimiter: -      # 配置编号生成时的分隔符
Clone this wiki locally