Spring Cloud Stream 3.1以后的使用方法

在Spring Cloud Stream 3.1中@EnableBinding已经被做了@deprecated的标注。那我们原有的程序如何适应新版本呢,确实Spring Cloud Stream在这方面做了很大的改进。

Spring现在不再使用基于注释的配置,而是使用检测到的Consumer / Function / Supplier的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());
         }
      }
   }
}

Consumer替代了@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

输入和输出对应于绑定的类型(例如input或output)。 索引是输入或输出绑定的索引。 对于典型的单个输入/输出功能,它始终为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" }
    }
}
上一篇:智能指针(二)智能指针和哑类


下一篇:css——样式表分类,选择器