参考rockemq官方文档:https://help.aliyun.com/document_detail/43349.html?spm=a2c4g.11174283.6.555.64fc347dRoDkZy
限制:定时和延时消息的msg.setStartDeliverTime
参数可设置40天内的任何时刻(单位毫秒),超过40天消息发送将失败。
生产消息:
/**
* 消息生产
*
* @param scheduleDto 消息体
*/
@Override
public void messageProducer(AssWorkScheduleDto scheduleDto) {
logger.info("AssWorkScheduleProducerImpl 生产的消息:{}", scheduleDto);
if (null == scheduleDto) {
logger.error("AssWorkScheduleProducerImpl 请求参数为空.");
return;
}
Long executeTime = scheduleDto.getExecuteTime();
if (null == executeTime) {
logger.error("AssWorkScheduleProducerImpl executeTime为空.");
return;
}
if (System.currentTimeMillis() >= executeTime) {
logger.error("AssWorkScheduleProducerImpl executeTime小于当前时间.");
return;
}
Message<AssWorkScheduleDto> message = new Message<>();
message.setData(scheduleDto);
message.setStartDeliverTime(executeTime);
logger.info("msg body: {}", JSON.toJSONString(message));
super.send(message);
}
消费消息:
@Override
public ConsumeResult consume(Message<AssWorkScheduleDto> message) {
logger.error("AssWorkScheduleListener 接受的消息:{}", JSON.toJSONString(message));
AssWorkScheduleDto data = message.getData();
if (null == data) {
//直接提交
return ConsumeResult.CommitMessage;
}
try {
switch (data.getBusinessTag()) {
case AssWorkScheduleTypeConstant
.MP_AUTO_COMPLETE:
assWorkScheduleService.updateAssWorkComplete4Mp(data);
break;
case AssWorkScheduleTypeConstant.MP_IS_OVERTIME:
assWorkScheduleService.updateAssWorkOvertime4Mp(data);
break;
default:
break;
}
} catch (Exception e) {
logger.error("AssWorkScheduleListener 消费失败", e);
//消费失败,重新消费
return ConsumeResult.ReconsumeLater;
}
return ConsumeResult.CommitMessage;
}
Dto:
@Data
public class AssWorkScheduleDto implements Serializable {
/**
* 执行时间-单位:ms
*/
private Long executeTime;
/**
* 业务标识
*/
private int businessTag;
}