V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VeryZero
V2EX  ›  程序员

Spring Cloud Stream 如何用函数式的方法处理下游返回的消息?

  •  
  •   VeryZero · 2022-12-29 12:30:24 +08:00 · 895 次点击
    这是一个创建于 699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似于这种

         event.publish(sendMessage).onResult(resultMessage -> {
                //todo
            });
    

    具体需求是先发送一条消息给下游,下游处理完成后再返回一条消息回来告知处理结果。

    原来的做法是定义一堆 @Output @Input @StreamListener

    分散在各处,代码可读性很差。不知道有没有函数式的办法可以让两者关联起来

    2 条回复    2022-12-30 13:01:12 +08:00
    mmdsun
        1
    mmdsun  
       2022-12-30 10:12:41 +08:00
    消息手动发,看看能不能获取消息提交的 offset ,应该可以做到。或者,可以利用中间件存储一些状态。

    这个问题比较相似:
    https://stackoverflow.com/questions/73006450/is-there-any-way-to-know-if-kafka-message-has-been-confirmed-in-producer
    lmshl
        2
    lmshl  
       2022-12-30 13:01:12 +08:00
    Promise 模式
    任务开始时创建 Promise 和标识句柄,收到来自下游的任务结束,根据句柄找到 Promise 并标记为 Resolve/Completed
    这样业务里看到 Promise 状态变更时,自动进入 then 逻辑继续后面的处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:34 · PVG 20:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.