Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringCloudStream3.x中不推荐使用EnableBinding_Java_Spring - Fatal编程技术网

Java SpringCloudStream3.x中不推荐使用EnableBinding

Java SpringCloudStream3.x中不推荐使用EnableBinding,java,spring,Java,Spring,我正在用卡夫卡做一个微服务项目。我希望在将记录保存到数据库时调用事件。我一直在看关于SpringCloudStream的教程。它们都使用@EnableBinding、@Input、@Output注释。当我尝试使用它们时,它说它们不受欢迎。我用的是spring的缩写ZR。发行说明说我应该使用供应商、消费者和函数,而不是像输入、输出和过程这样的旧方法 @Bean public Supplier<String> toUpperCase() { return () -> {

我正在用卡夫卡做一个微服务项目。我希望在将记录保存到数据库时调用事件。我一直在看关于SpringCloudStream的教程。它们都使用@EnableBinding、@Input、@Output注释。当我尝试使用它们时,它说它们不受欢迎。我用的是spring的缩写ZR。发行说明说我应该使用供应商、消费者和函数,而不是像输入、输出和过程这样的旧方法

@Bean
public Supplier<String> toUpperCase() {
    return () -> {
        return "hello from supplier";
    };
}
@Bean
公共供应商toUpperCase(){
返回()->{
返回“供应商您好”;
};
}

当我使用这样的供应商时,它会每秒生成一条消息,因为它在教程中也会突出显示。我不希望它每秒钟都被公布。我希望它能在我想出版的时候出版。它说我应该调用它的get()方法,但我不知道如何调用。教程使用不推荐使用的函数来实现这种功能。如果没有弃用的函数,我如何实现这种行为?或者如何使用EnableBinder注释而不说它已弃用?

您可以在

它展示了如何使用RabbitMQ和Kafka为供应商和消费者实现云流,以及如何对这两种服务进行端到端测试

对于您的情况: 在您的供应商bean中,执行以下操作:

@Bean
public Supplier<DataEvent<String, User>> savedMessage() {
    return () -> {
        return null;
    };
}
@Bean
公共供应商保存的消息(){
返回()->{
返回null;
};
}
Spring在函数包中提供了StreamBridge,可用于发送事件。 假设您有一个保存到数据库中的服务层。要做的第一件事是创建一个由构造函数绑定注入的自动连接StreamBridge,并使用它发送消息,如下所示。请注意,供应商的名称应该是文档中解释的输出的绑定名称

private final StreamBridge stream;
private final UserRepository repo;

// Store your topic/binding name as the supplier name as follows
private static final String SUPPLIER_BINDING_NAME = "savedMessage-out-0"

public UserService(UserRepository repo, StreamBridge stream) {
   this.repo = repo;
   this.stream = stream;
}

// Your save method
public void saveUser(User user) {
  // Do some checking...

  //save your record
  User user = repo.save(user);
  
  //check if user is saved or not null
  //create your message event (Assuming you have a DataEvent class)
  DataEvent<String, User> event = new DataEvent<>("User Saved", user);
  boolean sent = stream.send(SUPPLIER_BINDING_NAME, event));

  // Check the repo above for proper implementation.
}
私有最终流桥流;
私有最终用户存储库回购;
//将您的主题/绑定名称存储为供应商名称,如下所示
私有静态最终字符串供应商\u绑定\u NAME=“savedMessage-out-0”
公共用户服务(用户存储库repo、StreamBridge stream){
this.repo=回购;
this.stream=流;
}
//您的保存方法
公共void saveUser(用户){
//做一些检查。。。
//保存您的记录
用户=回购保存(用户);
//检查用户是否已保存或不为空
//创建消息事件(假设您有DataEvent类)
DataEvent事件=新的DataEvent(“用户已保存”,用户);
布尔发送=stream.send(供应商名称、事件));
//检查上述回购协议是否正确实施。
}
对于消费者实施,请查看上面的my repo

这里还有一个实现,虽然是用Kotlin编写的

您也可以在这里查看GitHub上的Spring最近项目

此链接可能会有所帮助