云网络订单模块流量染色功能浅谈

1、问题分析

灰度发布时,订单工程会起两个工程,假设order-v1简称v1,为正式工程,order-v2简称v2,为灰度工程,后面均以此定义。现在有这样一种情况:当有v2工程有订购类接口被调用时,工程会请求mop,然后mop下发mq消息B,消息B无法区分接受方是v1还是v2工程,此时就会存在抢消息现象,导致消息无法被发送消息的工程消费,导致订单出错。

抢消息示意图

2、改造方案

可以参考现有的灰度发布的方式,通过ingress中userid来区分是访问v1还是v2工程。所以,考虑给在mop发送过来的消息中加上userid信息,在下发至工程前,通过feign调用订单工程的方式,并在请求头中塞入userid,再经过ha至ingress分流,最后到对应的工程,及v1消费消息A,v2消费消息B,互不影响。具体流程如下:

改造后流量走向

3、改造相关代码

/*
Feign调用代码
**/

@FeignClient(name = "order",
        fallbackFactory = OrderClientFallbackFactory.class,
        path = "/orderpath",
        url = "url")
 public interface OrderClient {
    @PostMapping(value = "/book")
    @ApiOperation(value = "订购实例")
    ReturnMessage<Boolean> createInstance(
            @RequestHeader(REQUEST_ID) String requestId,
            @RequestHeader(USER_ID) String userId,
            @RequestBody CreateReq createReq,
            @RequestParam(req2) String req2);
 }
/*
Controller
**/
@RestController
@RequestMapping(value = "/orderpath/book")
public class Controller {
	@PostMapping(value = "/book")
	public ReturnMessage<Boolean> createInstance(@RequestBody CreateReq createReq,
                                                   @RequestParam String req2) {
                                                   		//dosomething
                                                   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值