从spring-cloud-stream应用启动器修改消息正文

时间:2018-11-16 10:36:59

标签: spring-cloud-stream

我是Spring Cloud Stream的新手。我的用例是从文件源中读取并为文件中的每一行发布消息(到Kafka)。我尝试使用文件源应用启动器(https://github.com/spring-cloud-stream-app-starters/file/tree/master/spring-cloud-starter-stream-source-file),并且能够发布消息。

但是,现在我需要在发布之前调整邮件的正文。应用启动器会生成通用消息,我需要在发布之前修改结构。我曾尝试在SO上搜索,但没有找到任何合适的示例。有人可以建议如何实现这一目标吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

实际上,这是一个新功能,我们将很快写博客,但我将在这里尝试解释。我相信您想扩展现有的应用程序,因此在这种情况下,您只想创建一个扩展 source-file 的新应用程序,然后使用新添加的Spring Cloud Function支持将您的转换器简单地组合到现有应用。 首先,您需要确保使用的是最新的Spring Cloud Stream,该流应该是Fishtown.RC1(2.1.0.RC1)。 另外,我们还有一个example (which is going to be used for the blog),您可能会觉得有用。它实际上可以完全满足您的需求。仅扩展而不是扩展file-source而是扩展http-source,这意味着您只需要将pom中的依赖项从spring-cloud-starter-stream-source-http交换到spring-cloud-starter-stream-source-file,然后简单地定义一个Function类型的Bean,其中您可以在启动--spring.cloud.stream.function.definition=uppercase的过程中定义转换并提供属性,其中uppercase是要在文件源末尾组成的函数的名称。

@SpringBootApplication
public class MyAppExtender {

    public static void main(String[] args) {
        SpringApplication.run(MyAppExtender.class, "--spring.cloud.stream.function.definition=uppercase");
    }

    @Bean
    public Function<String, String> uppercase() {
        return x -> x.toUpperCase();
    } 
}

无论如何,我知道上面的解释可能会遗漏一些内容,但请试一试,看看您是否有后续问题。我将确保在准备好博客后将其发布。

答案 1 :(得分:0)

消息是不可变的。

.transform()添加flowBuilder()方法。

请参见transformers