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