|
@@ -15,6 +15,7 @@ import com.chelvc.framework.base.context.JacksonContextHolder;
|
|
|
import com.chelvc.framework.base.util.ObjectUtils;
|
|
|
import com.chelvc.framework.rocketmq.context.RocketMQContextHolder;
|
|
|
import com.chelvc.framework.rocketmq.interceptor.SessionRocketMQListener;
|
|
|
+import com.chelvc.framework.rocketmq.model.ConsumeStatus;
|
|
|
import com.chelvc.framework.rocketmq.model.MessageContext;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.rocketmq.client.AccessChannel;
|
|
@@ -124,29 +125,37 @@ public class SessionRocketMQListenerContainer extends DefaultRocketMQListenerCon
|
|
|
ConsumeMode mode = ObjectUtils.ifNull(annotation, RocketMQMessageListener::consumeMode);
|
|
|
if (mode == ConsumeMode.ORDERLY) {
|
|
|
consumer.setMessageListener((MessageListenerOrderly) (messages, context) -> {
|
|
|
+ ConsumeStatus status;
|
|
|
try {
|
|
|
- listener.onMessageContexts(messages.stream().map(this::convert).collect(Collectors.toList()));
|
|
|
+ status = listener.onMessageContexts(
|
|
|
+ messages.stream().map(this::convert).collect(Collectors.toList())
|
|
|
+ );
|
|
|
} catch (Exception e) {
|
|
|
String ids = messages.stream().map(MessageExt::getMsgId).collect(Collectors.joining(","));
|
|
|
log.error("Orderly message consume failed [{}][{}]: {}", group, topic, ids, e);
|
|
|
return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;
|
|
|
} finally {
|
|
|
consumer.setConsumeMessageBatchMaxSize(listener.getBatchConsumeSize());
|
|
|
+ context.setSuspendCurrentQueueTimeMillis(listener.getOrderlyRetryInterval());
|
|
|
}
|
|
|
- return ConsumeOrderlyStatus.SUCCESS;
|
|
|
+ return status == null ? ConsumeOrderlyStatus.SUCCESS : status.orderly();
|
|
|
});
|
|
|
} else {
|
|
|
consumer.setMessageListener((MessageListenerConcurrently) (messages, context) -> {
|
|
|
+ ConsumeStatus status;
|
|
|
try {
|
|
|
- listener.onMessageContexts(messages.stream().map(this::convert).collect(Collectors.toList()));
|
|
|
+ status = listener.onMessageContexts(
|
|
|
+ messages.stream().map(this::convert).collect(Collectors.toList())
|
|
|
+ );
|
|
|
} catch (Exception e) {
|
|
|
String ids = messages.stream().map(MessageExt::getMsgId).collect(Collectors.joining(","));
|
|
|
log.error("Concurrently message consume failed [{}][{}]: {}", group, topic, ids, e);
|
|
|
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
|
|
|
} finally {
|
|
|
consumer.setConsumeMessageBatchMaxSize(listener.getBatchConsumeSize());
|
|
|
+ context.setDelayLevelWhenNextConsume(listener.getConcurrentlyRetryInterval());
|
|
|
}
|
|
|
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
|
|
|
+ return status == null ? ConsumeConcurrentlyStatus.CONSUME_SUCCESS : status.concurrently();
|
|
|
});
|
|
|
}
|
|
|
}
|