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

@EnableBinding@从3.1开始被弃用,转而支持函数式编程模型

郭逸清
2023-03-14

我看到下面的注释是为春云流贬值

< code > @ Input < code > @ Output < code > @ enable binding < code > @ StreamListener

请提供示例和文档链接,说明如何以功能方式进行操作。

共有3个答案

阮喜
2023-03-14

以下是一些更有帮助的信息:

发送消息

使用org.springframework.cloud.stream.function。用于发送消息的StreamBridge。

以前

myDataSource.output().send(message);

之后

streamBridge.send("myData-out-0", message);

替换ServiceActivator

以前

@ServiceActivator(inputChannel = MyProcessor.INPUT, outputChannel = MyProcessor.OUTPUT)
public Message<MySuperOutputMessage> transform(Message<MySuperInputMessage> message) { ... }

之后

@Bean
Function<Message<MySuperInputMessage>, Message<MySuperOutputMessage>> myCoolFunction() {
    return message -> {...}; 
}

不要忘记在属性spring.cloud.function.definition中注册“myCoolFunction”。

西门逸仙
2023-03-14

这个github存储库包含了很多例子。
https://github.com/spring-cloud/stream-applications

官方留档详细解释了如何从命令式到功能式在Spring云流应用程序kafka流,但没有它是一样的。

https://docs.spring.io/spring-cloud-stream/docs/3.1.0/reference/html/spring-cloud-stream.html#spring_cloud_function

也请查看此帖子..
https://spring.io/blog/2019/10/14/spring-cloud-stream-demystified-and-simplified

https://docs.spring.io/spring-cloud-stream-binder-kafka/docs/3.1.0/reference/html/spring-cloud-stream-binder-kafka.html#_programming_model

有一个命令式代码的示例(https://docs.spring.io/spring-cloud-stream-binder-kafka/docs/3.1.0/reference/html/spring-cloud-stream-binder-kafka.html#_imperative_programming_model)以及如何以功能风格开发。

莘光华
2023-03-14

Spring现在使用检测到的消费者/功能/供应商bean来为您定义流,而不是使用基于注释的配置。旧版本带有注释的代码如下所示:

interface InputChannels {
    
        @Input("input")
        SubscribableChannel input();
    }

    @EnableBinding(InputChannels.class)
    public class PubSubDemo {
    @StreamListener("input")
    public void listen() {
            
        if (LOG.isInfoEnabled()) {
            LOG.info(context.toString());
        }
    }

新版本代码将类似于:

public class PubSubDemo {
   @Bean
   Consumer<String> input() {
    return str -> {
        
        if (LOG.isInfoEnabled()) {
            LOG.info(context.toString());
             }
        };
   }
}

检查消费者 bean 替换了@StreamListener和@Input。

关于配置,如果之前为了配置你有一个application.yml看起来像这样:

spring:
  cloud:
    stream:
      bindings:
        input:
          destination: destination
          group: group
          consumer:
            concurrency: 10
            max-attempts: 3

现在新的配置将是这样的

spring:
  cloud:
    stream:
      bindings:
        input-in-0:
          destination: destination
          group: group
          consumer:
            concurrency: 10
            max-attempts: 3

可选:Spring 云流库自行创建 bean。如果未创建 Bean。使用以下属性。

spring:
   cloud:
     stream:
        function:
           definition: input

输入和输出对应于绑定的类型(例如输入或输出)。索引是输入或输出绑定的索引。对于典型的单输入/输出功能,它始终为0。

现在让我们考虑输出通道:

    public interface OutputChannels {
        @Output
        MessageChannel output();
    }

    @Service
    @EnableBinding(OutputChannels.class)
    class PubSubSendQueue {
    
    OutputChannels  outputChannel;

    public void publish() {
        outputChannel.output().send("Hello");
    }
}

现在使用函数代码将作为:

@Service
class PubSubSendQueue {
    @Bean
    public Supplier<String> output(){
        return Supplier { "Adam" }
    }
}

在application.properties文件中添加以下内容

spring.cloud.stream.bindings.output-out-0.destination=destination
 类似资料:
  • 函数式编程 函数式编程是种编程范式,它需要我们将函数作为参数传递,或者作为返回值返还。我们可以通过组合不同的函数来得到想要的结果。 我们来看一下这几个例子: // 全校学生 let allStudents: [Student] = getSchoolStudents() // 三年二班的学生 let gradeThreeClassTwoStudents: [Student] = allStude

  • 自3.1版以来,用于处理队列的主要API已被弃用。课堂评论中写道: 从3.1开始就不推荐使用函数式编程模型 我在网上搜索了很多解决方案,但没有找到关于如何迁移的可靠的E2E解释。 正在寻找以下方面的示例: 从队列读取 如果有几种方法可以做到这一点(正如我在网上看到的),我很乐意为每个选项提供解释和典型用例。

  • 问题内容: 在群集的完整Java EE应用程序中,DTO模式仍然是有效的选择吗?有问题的应用程序使用EJB Hibernate和Struts以及Spring等。在这种情况下传输域对象有什么问题吗? 编辑:只是为了澄清我的问题,随着现代资源和Java EE的改进,是否有理由不仅仅使用域对象?如果没有,那么DTO模式是否会逐渐消失并且不应该在新的应用程序中使用? 问题答案: 不被弃用。是否应使用DTO

  • 我想知道Gradle/Google在这方面的方向是什么,因为目前不可能规划一个适当的开发计划。 版本0.7+:他们建议仍然使用ndk-build/ant版本0.8+:他们已经引入了最小的NDK支持版本1.0.0:看起来NDK支持将成为正式版本1.0.2:现在看来NDK支持不推荐使用了。 我的问题是: > 每个人都恢复到ndk-build和手工制作的Android.mk文件了吗? “将来会提供另一种

  • 我们起初将Functional一词译作泛型,想要表达该类模型能够表达任意张量映射的含义,但表达的不是很精确,在Keras 2里我们将这个词改译为“函数式”,对函数式编程有所了解的同学应能够快速get到该类模型想要表达的含义。函数式模型称作Functional,但它的类名是Model,因此我们有时候也用Model来代表函数式模型。 Keras函数式模型接口是用户定义多输出模型、非循环有向模型或具有共

  • 问题内容: 我正在使用Spring Data Commons v2 +快照,并且看到a的构造函数已被弃用。这似乎发生在M1和M2之间。不幸的是,这是该接口的唯一[真实]实现。我想知道努力的方向,对于当前的开发有什么更好的选择。 问题答案: 只是已弃用的构造函数。代替 您现在可以使用 就是这样。