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" }
    }
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值