ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Cloud Stream 3.1以后的使用方法

2021-05-09 15:02:57  阅读:1035  来源: 互联网

标签:group Stream output Spring destination class 3.1 input public


在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" }
    }
}

标签:group,Stream,output,Spring,destination,class,3.1,input,public
来源: https://blog.csdn.net/cnhome/article/details/116564535

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有