为什么spring找不到Spring Cloud Stream创建的@Source bean通道?

2024-01-12

我正在尝试使用 Spring Cloud Stream 来发布和使用 Kafka 消息。我一直在研究文档这里关于访问绑定通道 http://docs.spring.io/spring-cloud-stream/docs/Chelsea.SR2/reference/htmlsingle/index.html#_accessing_bound_channels。我试图在我的主题的频道上使用自定义名称,因此当我尝试注入它时我有一个@Qualifier,但 spring 找不到相关的 bean。它说“对于每个绑定接口,Spring Cloud Stream 将生成一个实现该接口的 bean”,但自动装配不起作用。

我收到的错误是“com...MessagingManager 中的构造函数的参数 0 需要一个类型为 'org.springframework.messaging.MessageChannel' 的 bean,但无法找到。”

我尝试在 MessagingManager 构造函数之前使用 @Autowired (如示例中所示),但随后在 bean 工厂中出现了类似的错误,其中有 2 个,所以我将其取出,并得到了当前错误。

我尝试使用处理器可能会让事情变得复杂。

这是我的组件。我正在使用 Spring Boot 运行它并尝试使用以下命令对其进行测试:

@Component
public class StartupTester implements ApplicationListener<ContextRefreshedEvent> {
    MessagingManager messagingManager;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        messagingManager.sendThingCreatedMessage(new ThingCreated("12345", "667788"));
    }
}

@Component
public class MessagingManager {

    private MessageChannel thingCreatedChannel;

    public MessagingManager(@Qualifier(ThingChannelProcessor.THING_CREATED) MessageChannel output) {
        thingCreatedChannel = output;
    }

    public void sendThingCreatedMessage(ThingCreated thingCreated) {  
thingCreatedChannel.send(MessageBuilder.withPayload(thingCreated).build());
    }
}


@Component
    public interface ThingsChannelProcessor extends Processor {

    String THING_REQUEST = "thing-request";
    String THING_CREATED = "thing-created";

    @Input(THING_REQUEST )
    SubscribableChannel thingsRequest();

    @Output(THING_CREATED )
    MessageChannel thingCreated();
}

我的主类上也有 @EnableBinding(ThingsMessagingManager.class),它用 @SpringBootApplication 注释。


我无法重现您的错误。但我有几点你可以遵循:

  1. 您不需要使用以下方式注释接口@Component
  2. 您的内容似乎有错字@EnableBinding你应该有@EnableBinding(ThingsChannelProcessor.class)不是 ThingsMessagingManager
  3. 您也不需要扩展 Processor,这可能是您第一次获得 2 个 bean 的原因。如果您正在自定义通道,则不需要从 Sink/Source/Processor 下降,请查看Barista文档中的示例
  4. 监听 contextRefresh 也不起作用,因为我们在刷新上下文后进行绑定

事实上,让我更清楚一点4。我们创建了一个子上下文,因此为了确保您的上下文已完全初始化,请确保您还在 Starter 上实现了 ApplicationContextAware,并在发送消息之前检查上下文是否相同,否则您将收到错误if(this.context.equals(event.getApplicationContext()))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么spring找不到Spring Cloud Stream创建的@Source bean通道? 的相关文章

随机推荐

  • 如何检查我的应用程序中的 SDK 是否正在收集任何广告 ID

    Google 向我发送了一条警告 通知我我的一个应用程序正在收集信息安卓设备 ID and 广告ID信息 有没有什么工具可以用来测试这个活动涉及哪个SDK P s 我正在使用以下 SDK Admob 中介 Firebase Onesigna
  • 如何暂时禁用EGit?

    当做类似的事情时git repack从命令行 包被锁定并且无法删除 从而使存储库大小加倍 罪魁祸首很可能是 EGit 保持文件打开 这在 Windows 中是不好的 退出 Eclipse 是我所知道的唯一解决方法 我发现了本文 https
  • AWS Glue 截断 Redshift 表

    我创建了一个 Glue 作业 将数据从 S3 csv 文件 复制到 Redshift 它可以工作并填充所需的表 但是 我需要在此过程中清除表 因为在该过程完成后我留下了重复的记录 我正在寻找一种方法将这种清除添加到胶水过程中 任何意见 将不
  • 从 Android 应用程序分享视频

    我们是一个视频托管门户 用户可以根据观看次数上传视频并从中获利 我们最近推出了一款 Android 应用程序 并尝试将 分享 按钮集成到每个视频中 这是我们放置的代码 Intent intent new Intent try URL url
  • 接口和标头

    今天我遇到了 C 接口的概念 我有一个希望很简单的问题来看看我是否理解它们 它们与 C 头文件非常相似吗 我的意思是 根据我得到的信息 您定义了类的主干 但没有实际定义它的功能 这有点类似于标头 对吗 我阅读了整个 MSDN 定义 但它并没
  • Java循环效率

    我正在比较 Java 中嵌套的 for while 和 do while 循环的效率 并且遇到了一些奇怪的结果 需要帮助理解 public class Loops public static void main String args in
  • Python 中可处理大指数的贝塞尔函数

    我有一些代码使用一阶和二阶 iv 和 kv 的修改贝塞尔函数 令人烦恼的是 它们似乎有限制 即 iv 0 713 和 kv 0 697 分别加 1 分别得到无穷大和 0 这对我来说是一个问题 因为我需要使用高于此的值 通常高达 2000 或
  • 如何阻止文本被选择?

    在我的网络应用程序中 用户有时可以多次单击同一按钮 跳过消息和内容 从而导致被选中 那么如何使用 Javascript jQuery 来防止这种情况发生 你不需要为此编写脚本 这里是 css webkit touch callout non
  • 在 C# 中使用本地 DTD 文件验证 XML 文件时出现问题

    我正在尝试验证 XML 文件 我正在使用这个代码 XmlReaderSettings settings new XmlReaderSettings settings ProhibitDtd false settings Validation
  • Nodejs 和 php 生成的不同 HMAC

    base64 encode the binary result of the HMAC computation merchantSig base64 encode hash hmac sha256 signData pack H hmacK
  • 在 R 中生成数字

    在R中 如何生成N个平均值为X 中位数为Y 至少接近 的数字 或者更一般地说 是否有一个算法可以实现这一点 有无限多个解决方案 近似算法 生成低于中位数的 n 2 个数字 生成高于中位数的 n 2 个数字 添加您想要的中位数并检查 添加一个
  • 如何改变javafx中窗格的颜色?

    我想改变 a 的颜色Pane我得到的String来自用户 我该如何设置这个String作为我的窗格中的背景颜色 Code colorField setOnKeyTyped new EventHandler
  • 使用过多 JavaScript 有什么坏处?

    我想知道在网页中使用过多 JavaScript 代码有哪些缺点 例如 我将为我的下拉菜单 选项卡和折叠面板使用 jQuery 框架 以及用于我的日历的其他 JavaScript 尽管有可用的使用 jQuery 的日历 和用于其他内容的其他
  • KnockoutJs,第三方模板库,JsRender

    Knockout 与最新的 JsRender 版本兼容吗 template binding Daniel Knockout 的模板目前与 jsRender 不兼容 我尝试过 jsRender 模板引擎here http jsfiddle n
  • 将数据库放入android项目中

    我在 stackoverflow 上读到了大约 5 个线程 但仍然不知道该怎么做 我已经有 sqlite 数据库 但我不知道将它放在我的 android studio 项目中的哪里 我想要随应用程序一起下载数据库 它并不假装是最好的方法 但
  • Node.js 全局变量

    我在这里问 Node js 需要继承吗 https stackoverflow com questions 5348685 node js require inheritance 有人告诉我 我可以通过省略变量来将变量设置为全局范围 这对我
  • 如何在黑莓中使BrowserField的背景透明

    我在用BrowserField的组成部分RIM BB 它现在显示白色背景 我想要制作一个透明背景 这样它就可以与经理的背景颜色相匹配 我曾尝试使用下面的代码 但这不起作用 BrowserField contentField new Brow
  • 为什么字符串类型的默认值是null而不是空字符串?

    测试我所有的琴弦是很烦人的null在我可以安全地应用像这样的方法之前ToUpper StartWith etc 如果默认值为string如果是空字符串 我就不必测试 而且我觉得它与其他值类型更加一致 例如int or double例如 此外
  • Ansible jenkins_plugin 模块返回“HTTP 错误 403:请求中未包含有效的 crumb”

    我使用 Ansible v 2 8 作为 Packer 模板背后的配置程序来为 Jenkins 主节点构建 AMI 对于以前的版本 剧本已成功通过 然而 从 Jenkins 版本 2 176 3 开始 jenkins plugin模块一直在
  • 为什么spring找不到Spring Cloud Stream创建的@Source bean通道?

    我正在尝试使用 Spring Cloud Stream 来发布和使用 Kafka 消息 我一直在研究文档这里关于访问绑定通道 http docs spring io spring cloud stream docs Chelsea SR2