Spring Rocketmq 事务消息

1、 RocketMQMessageListener参数讲解

@RocketMQMessageListener事务消息监听器

2、参数一 :consumeMode
 

  /**
     *控制消费模式,您可以选择并发或有序接收消息。
     */
    ConsumeMode consumeMode() default ConsumeMode.CONCURRENTLY;
 

3、参数二:messageModel

   

/**
      * 控制消息模式,
      * 广播模式:所有消费者都能接受到消息
      * 集群模式:无论有多少个消费者,只有一个消费者能够接收到消息。
      */
    MessageModel messageModel() default MessageModel.CLUSTERING;

4、参数三:selectorExpression
   

/**
     * 控制可以选择哪个消息
     */
    String selectorExpression() default "*";

     // 同步顺序消息 根据下面使用方式使用即可,在主题上面拼接
    rocketMQTemplate.syncSendOrderly("MQ_TOPIC:user", info);

5、参数四:consumerGroup
   

/**
      *
      *概念:消费者组(多个消费者) 此参数相同即为同一个消费者组
      *作用:集群模式负载均衡的实现,广播模式的通知的实现
      *
      */
    String consumerGroup();

6、参数:topic
   

/**
     * Topic name. 主题
     * 指该消费者组所订阅的消息服务
     * 
     */
    String topic();

7、代码示例

@Service
@RocketMQMessageListener(topic = MQTopicConstants.ZTEITS_RNT_CLOUD,
    selectorExpress = DataCollectionTags.FREE_BERTHS_CHANGE,
    consumeMode = ConsumeMode.BATCH,
    consumerGroup = "${spring.application.name}-" + MQConsumerGroupConstants.UPDATE_FREE_BERTHS_TODB
)
public class UpFreeBerthsMQListener
    implements RocketMQListener<FreeBerthsChangeMsgVO>, AliyunRocketMQPushConsumerLifecycleListener {
    private static final Logger logger = LoggerFactory.getLogger(UpFreeBerthsMQListener.class);
    @Autowired
    private FreeBerthsPushOperService freeBerthsPushOperService;
    @Autowired
    private ParkFreeBerthOperInnerService freeBerthOperInnerService;

    @Autowired
    private DealThirdPushService dealThirdPushService;


    @Override
    public void onMessage(FreeBerthsChangeMsgVO berthsChangeMsgVO) {
        /**********************处理第三方平台进出场推送******************/
        try{
            berthsChangeMsgVO.setSysCode(BasicEnum.SYS_CODE.getValue());
            dealThirdPushService.pushThirdServiceForFreeBerthMsg(berthsChangeMsgVO);
        }catch (Exception e){
            e.printStackTrace();
        }
        /**********************处理第三方平台进出场推送******************/


        try {
            logger.info("==更新空闲车位数到数据库==" + berthsChangeMsgVO.toString());
            freeBerthOperInnerService.updateFreeBerthsNumByPlNo(berthsChangeMsgVO.getPlNo(),
                berthsChangeMsgVO.getFreeBerths(), berthsChangeMsgVO.getRealFreeBerths());
            PushFreeBerthsChangeRequest freeBerthsChangeMsgVO = new PushFreeBerthsChangeRequest();
            freeBerthsChangeMsgVO.setSysCode(BasicEnum.SYS_CODE.getValue());
            List<FreeBerthsChangeMsgVO> berthsChangeMsgVOs = new ArrayList<>();
            berthsChangeMsgVOs.add(berthsChangeMsgVO);
            freeBerthsChangeMsgVO.setBerthsChangeMsgVOs(berthsChangeMsgVOs);
            BizResult<Boolean> bizResult = freeBerthsPushOperService.pushFreeBerthsToScreen(freeBerthsChangeMsgVO);
            if (!ResultUtils.isSuccess(bizResult)) {
                logger.info("诱导推送失败:" + bizResult.getErrMsg());
            }
        } catch (Exception e) {
            logger.error("更新空闲车位数到数据库失败", e);
        }
    }

    @Override
    public void prepareStart(Properties properties) {
        //设置该消费者一次批量消费条数
        properties.put(PropertyKeyConst.ConsumeMessageBatchMaxSize, 24);

    }
}

注意:顺序处理不能和广播模式同时使用,应该广播模式是属于并发的,而顺序是强调FIFO原则,广播模式不能保证顺序一致性。

原文链接:https://blog.csdn.net/weixin_51442090/article/details/128659127

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值