当前位置: 首页 > 知识库问答 >
问题:

Spring云流 - 基于内容的路由

高宸
2023-03-14

我正在尝试在最新版本的 Spring Cloud 流中使用基于内容的路由。根据这份文件 -

这是我用StreamListener编写的代码

@StreamListener(target = EventChannels.FILE_REQUEST_IN
            , condition = "headers['saga_request']=='FILE_SUBMIT'")
public void handleSubmitFile(@Payload FileSubmitRequest request) {
        
}

@StreamListener(target = EventChannels.FILE_REQUEST_IN
            , condition = "headers['saga_request']=='FILE_CANCEL'")
public void handleCancelFile(@Payload FileCancelRequest request) {
        
}

通过使用该条件,可以将消息路由到两个不同的函数。

我正试图用如下的功能接口方法来消费消息。

    @Bean
    public Consumer<String> consumeMessage(){
        return event -> {
            try {
                LOGGER.info("Consumer is working: {}", event);
            } catch (Exception ex) {
                LOGGER.error("Exception while processing");
            }
        };
    }

如何在函数中实现类似的基于内容的路由?蒂亚。

其他细节-

  1. Spring引导版本 - 2.3.12.发布
  2. Spring云版 - Hoxton.SR11

共有1个答案

宗政德宇
2023-03-14

你见过这个吗——https://docs . spring . io/spring-cloud-stream/docs/3 . 1 . 4/reference/html/spring-cloud-stream . html # _ event _ routing?我们提供两种不同的往返路由模型。包含的链接包含样本,所以请浏览它,并随时张贴任何后续行动

 类似资料:
  • 我们正在使用Spring Cloud Stream v2。2带有Kafka和Avro(本机编码器/解码器)。我们正在尝试根据负载的条件使用基于内容的路由。据我所知,根据Spring Cloud Stream文档,基于内容的路由只能在标头上实现,因为负载到达条件时没有经过类型转换过程。因此,除非条件基于字节格式,否则它将无法按预期工作。但是,我知道,当在本机模式下使用Avro时,会跳过消息头,并且不

  • 我需要创建一个反向代理,接收传入的请求,并基于请求正文的内容,将请求路由到特定的URI。 这是一个路由微服务,它类似于反向代理,根据来自每个请求主体的一些信息进行路由。这意味着对于每个请求,我需要解析请求正文并获得“username”字段,然后建立JDBC连接以从数据库中获取附加信息。根据数据库中的信息,它最终将请求重定向到正确的URI。 从我现在所拥有的,我有2个阻止方法。第一个是请求主体的解析

  • 我使用的是confluent,所以我已经根据confluent文档使用Connect.Properties中的confluent-hub安装了dibezium连接器 我需要使用io.debezium.transforms.contentbasedrouter https://debezium.io/documentation/reference/1.3/configuration/content-

  • 我有一个解压缩和文件的要求,并处理它的内容。在zip文件中,可以有两种类型的文件个人或公司。可以通过文件名区分的。在处理完所有文件后,它应该调用另一个程序模块,并将处理后的文件存档在不同的位置。希望使用Spring集成相同。我试图通过下面的代码来实现这一点,但它在基于文件名的路由时产生了问题。我使用的是JDK 8,Spring 5 例外 下面是整个代码段

  • 我开始开发一个spring cloud stream项目。我已通过@Streamlistener注释成功接收到来自Kafka的消息。在将消息发送到任何输出通道之前,我必须通过调用externalservice或DB调用来转换有效负载。我不想从同一个streamlistener方法调用外部服务或DB方法。我的问题是,我们能否在Spring云流中创建内部通道(如Spring集成DSL流)?