[Reading notes] message acknowledgment mq

Text connected trunked mode, to return the listener RECONSUME_LATER, these messages need to be sent to the delay message Broker. If you send a message ack fail, will be submitted to the thread pool for consumption after a delay 5s.

入口:ConsumeMessageConcurrentlyService#sendMessageBack

Command code: RequestCode.CONSUMER_SEND_MSG_BACK;

MQClientAPIImpl#consumerSendMessageBack:

public void consumerSendMessageBack(
        final String addr,
        final MessageExt msg,
        final String consumerGroup,
        final int delayLevel,
        final long timeoutMillis,
        final int maxConsumeRetryTimes
    ) throws RemotingException, MQBrokerException, InterruptedException {
        ConsumerSendMsgBackRequestHeader requestHeader = new ConsumerSendMsgBackRequestHeader();
        RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.CONSUMER_SEND_MSG_BACK, requestHeader);

        requestHeader.setGroup(consumerGroup);
        requestHeader.setOriginTopic(msg.getTopic());
        requestHeader.setOffset(msg.getCommitLogOffset());
        requestHeader.setDelayLevel(delayLevel);
        requestHeader.setOriginMsgId(msg.getMsgId());
        requestHeader.setMaxReconsumeTimes(maxConsumeRetryTimes);

        RemotingCommand response = this.remotingClient.invokeSync(MixAll.brokerVIPChannel(this.clientConfig.isVipChannelEnabled(), addr),
            request, timeoutMillis);
        assert response != null;
        switch (response.getCode()) {
            case ResponseCode.SUCCESS: {
                return;
            }
            default:
                break;
        }

        throw new MQBrokerException(response.getCode(), response.getRemark());
    }
public class ConsumerSendMsgBackRequestHeader implements CommandCustomHeader {
    @CFNotNull
    Private Long offset; // offset physical message
    @CFNotNull
    Private String Group; // Consumer group name
    @CFNotNull
    private Integer delayLevel;
    private String originMsgId;
    private String originTopic;
    @CFNullable
    private boolean unitMode = false;
    private Integer maxReconsumeTimes;

 

Guess you like

Origin www.cnblogs.com/lccsblog/p/12275379.html