REQ-3201: ack
This commit is contained in:
parent
2ebb78afe0
commit
b15d95881e
@ -12,25 +12,24 @@ import lombok.RequiredArgsConstructor;
|
||||
public enum UpdatableMessageState {
|
||||
|
||||
// 已创建
|
||||
TASK_CREATED(true, false),
|
||||
TASK_CREATED(true),
|
||||
// 消息已经放进队列
|
||||
INIT_MESSAGE_QUEUED(true, false),
|
||||
INIT_MESSAGE_QUEUED(true),
|
||||
// 消息已经发送成功
|
||||
INIT_MESSAGE_SEND_SUCCESS(true, false),
|
||||
INIT_MESSAGE_SEND_SUCCESS(true),
|
||||
// 消息已经发送失败
|
||||
INIT_MESSAGE_SEND_FAIL(true, false),
|
||||
INIT_MESSAGE_SEND_FAIL(true),
|
||||
// 更新已经放进队列
|
||||
UPDATE_MESSAGE_QUEUED(true, false),
|
||||
UPDATE_MESSAGE_QUEUED(true),
|
||||
// 更新已经发送成功
|
||||
UPDATE_MESSAGE_SEND_SUCCESS(true, true),
|
||||
UPDATE_MESSAGE_SEND_SUCCESS(true),
|
||||
// 更新已经发送失败
|
||||
UPDATE_MESSAGE_SEND_FAIL(true, true),
|
||||
UPDATE_MESSAGE_SEND_FAIL(true),
|
||||
// 更新ACK
|
||||
UPDATE_ACK(true, false),
|
||||
UPDATE_ACK(true),
|
||||
// 未找到账号
|
||||
ACCOUNT_NOT_FOUND(false, false);
|
||||
ACCOUNT_NOT_FOUND(false);
|
||||
|
||||
private final boolean isUpdateMessageAllowed;
|
||||
private final boolean isUpdateAckAllowed;
|
||||
|
||||
}
|
||||
@ -305,12 +305,14 @@ public class UpdatableMessageManager {
|
||||
messageLog.setRetryCount(0L);
|
||||
messageLog.setBizBody(null);
|
||||
messageLog.setDataVersion(message.getDataVersion());
|
||||
messageLog.addLogContent("ackDataVersion", ackDataVersion);
|
||||
messageLog.addLogContent("dataVersion", message.getDataVersion());
|
||||
messageLog.addLogContent("messageState", message.getState());
|
||||
BiConsumer<Boolean, String> ackLogger = (ackSuccess, ackDescription) -> {
|
||||
messageLog.addLogContent("ackSuccess", ackSuccess);
|
||||
messageLog.addLogContent("ackDescription", ackDescription);
|
||||
HashMap<String, Object> ackInfo = new HashMap<>();
|
||||
ackInfo.put("ackDataVersion", ackDataVersion);
|
||||
ackInfo.put("dataVersion", message.getDataVersion());
|
||||
ackInfo.put("messageState", message.getState());
|
||||
ackInfo.put("ackSuccess", ackSuccess);
|
||||
ackInfo.put("ackDescription", ackDescription);
|
||||
messageLog.addLogContent("ackInfo", ackInfo);
|
||||
};
|
||||
if (ackDataVersion == null) {
|
||||
ackLogger.accept(false, "ackDataVersion为空");
|
||||
@ -320,13 +322,8 @@ public class UpdatableMessageManager {
|
||||
ackLogger.accept(false, "ackDataVersion大于当前dataVersion");
|
||||
continue;
|
||||
}
|
||||
if (!ackDataVersion.equals(message.getDataVersion())) {
|
||||
ackLogger.accept(false, "数据版本不匹配");
|
||||
continue;
|
||||
}
|
||||
// 避免前端有bug或者有新的消息更新
|
||||
if (!message.getState().isUpdateAckAllowed()) {
|
||||
ackLogger.accept(false, "消息状态不允许ack");
|
||||
if (ackDataVersion < message.getAckDataVersion()) {
|
||||
ackLogger.accept(false, "ackDataVersion小于上次ackDataVersion");
|
||||
continue;
|
||||
}
|
||||
ackLogger.accept(true, "ack成功");
|
||||
@ -334,7 +331,8 @@ public class UpdatableMessageManager {
|
||||
collector.updateMessage(messageUpdate);
|
||||
messageUpdate.setId(message.getId());
|
||||
messageUpdate.setAckDataVersion(ackDataVersion);
|
||||
messageUpdate.setState(UpdatableMessageState.UPDATE_ACK);
|
||||
if (ackDataVersion.equals(message.getDataVersion()))
|
||||
messageUpdate.setState(UpdatableMessageState.UPDATE_ACK);
|
||||
ackedBizMessageIds.add(message.bizMessageId());
|
||||
}
|
||||
collector.finish();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user