栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

升级 Spring Cloud Stream 到3.1+,函数式定义 biding 无法生效问题解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

升级 Spring Cloud Stream 到3.1+,函数式定义 biding 无法生效问题解决

一、背景

项目升级了 Spring Cloud 的架构,顺带把 Spring Cloud Stream 的版本升级到了 3.2.x,然后发现以前使用的注解从3.1版本开始过时了,如 @EnableBinding、@StreamListener 等注解。

于是在定义新的 binding 时使用函数式,但是却无法生效。

二、问题重现

新建一个 biding ,按照官网的教程,写好配置文件与代码

@Component
public class MyOrderListener {


    @Bean
    public Consumer orderListener() {
        return msg -> {
            // 收到消息
        };
    }

}
spring:
  cloud:
    function:
      # 只有单例的时候能够自动检测到 MQ 的输入或者输出,多个 bean 实例需要有如下定义。文档https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream.html#_multiple_functions_in_a_single_application
      definition: orderListener
    stream:
      bindings:
        orderListener-in-0:
          destination: order-listener-exchange
          group: tmp

启动应用后,发现配置并不生效,最后发现原来是新的写法与旧的是不兼容的,源码在启动时会校验 bean 上下文是否有标注 @EnableBinding 的类,如果有则函数式的定义不会生效。
FunctionBindingRegistrar 的源码如下:

public void afterPropertiesSet() throws Exception {
	// 判断是否有 EnableBinding 注解的 bean
	if (ObjectUtils.isEmpty(applicationContext.getBeanNamesForAnnotation(EnableBinding.class))) {
		this.determineFunctionName(functionCatalog, environment);
		BeanDefinitionRegistry registry = (BeanDefinitionRegistry) applicationContext.getBeanFactory();

		if (StringUtils.hasText(streamFunctionProperties.getDefinition())) {
			String[] functionDefinitions = this.filterEligibleFunctionDefinitions();
			for (String functionDefinition : functionDefinitions) {
				// 略...
			}
		}

		this.createStandAloneBindingsIfNecessary(registry, applicationContext.getBean(BindingServiceProperties.class));

	}
	else {
		// 不执行函数式定义
		logger.info("Functional binding is disabled due to the presense of @EnableBinding annotation in your configuration");
	}
}
三、解决方案

目前本人的解决方案是将以前的 biding 写法换为新的函数式写法,毕竟这种写法更加简洁,官方也更推荐使用。如果不想改以前的 biding,那么无法使用函数式的定义。如有其它解决方案欢迎一起交流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号