【问题标题】:Spring cloud stream: Sending two payloads?Spring Cloud Stream:发送两个有效载荷?
【发布时间】:2020-01-23 15:25:54
【问题描述】:

我是 Spring Cloud Stream 的新手,我想知道是否有某种方法可以发送消息的两个有效负载以供其他服务处理。

我的用例是我有一个用户服务,我现在将它用作客户端应用程序。我有一个与用户和产品服务关联的帐户服务。

当用户购买产品时,我试图将 userId 与 productId 一起发送到帐户服务,帐户服务将余额和产品 ID 发送到产品服务,产品服务将确定如果余额足够高以购买产品。这是可能的还是我应该尝试不同的方法?

这是我从客户端打来的电话,但只发送用户 ID:


    @GetMapping("/{userId}/purchase")
    public void buyProduct(@PathVariable("userId") int userId, @RequestParam("productId") int productId) {
            Message<Integer> msg =MessageBuilder.withPayload(userId).build();
            this.purchaseProduct.send(msg);
    }      

我正在考虑使用 spring 集成,类似于:

@Bean
    IntegrationFlow integrationFlow(AccountChannels c) {
        return IntegrationFlows.from(c.purchaseProduct())
                .handle(Integer.class,(payload,headers)->{
                    ///Handle here

                    return null;
                }).get();

    }

【问题讨论】:

    标签: spring-boot spring-integration spring-webflux spring-cloud-stream


    【解决方案1】:

    几个建议。

    • 不要只发送 userid 作为有效负载,而是发送一个包含用户 ID 和产品 ID 的对象

    • 请改用“POST”请求,因为这是一个非幂等状态更改操作。

      类购买请求{ int 用户 ID; 整数产品ID; }

      @PostMapping("/purchases") public void buyProduct(@RequestBody PurchaseRequest purchaseRequest){ ... }

    • 考虑发布一个购买请求事件,产品服务监听该事件并要求账户服务验证余额。

    【讨论】:

    • 感谢您的回答,您能帮我更好地理解您最后提出的观点吗?
    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2014-11-10
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多