Discuss / Java / 为什么下单接口的消息不设置uniqueId, 这个不用做防重复处理吗

为什么下单接口的消息不设置uniqueId, 这个不用做防重复处理吗

Topic source
 @PostMapping(value = "/orders", produces = "application/json")
    @ResponseBody
    public DeferredResult<ResponseEntity<String>> createOrder(@RequestBody OrderRequestBean orderRequest) {
        final Long userId = UserContext.getRequiredUserId();
        // 消息的Reference ID:
        final String refId = IdUtil.generateUniqueId();
        var event = new OrderRequestEvent();
        event.refId = refId;
        event.userId = userId;
        event.direction = orderRequest.direction;
        event.price = orderRequest.price;
        event.quantity = orderRequest.quantity;
        event.createdAt = System.currentTimeMillis();
        ...
}

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

在极为罕见的情况下,gateway发送请求到后端服务器A,A处理后没返回给gateway,导致gateway超时后再转发给B,这样一个请求发了两个不同的消息(refId不同)

要避免这种情况,唯一方法是客户端自己再维护一个唯一id,即传一个clientId,保证一个请求只处理一次。


  • 1

Reply