当前位置: 首页 > 知识库问答 >
问题:

雨水口和螺栓不使用Spring自动接线

公良天逸
2023-03-14

我建立了一套喷口和螺栓的Storm拓扑,也使用Spring进行依赖注入。

不幸的是,尽管我已经将所有的喷口和螺栓声明为@Components,但没有一个字段自动连接。

然而,在我声明拓扑的地方,Spring运行良好,所有依赖项都被正确注入。

是因为集群吗。submitTopology(“test”,conf,builder.createTopology())将拓扑提交到自动布线不起作用的集群(在本地为喷嘴和螺栓生成不同的线程)?

请建议。

PS-

共有1个答案

松铭
2023-03-14

我问了这个问题,但没有人指示我正确的答案。发布它以便对某人有用:

喷口和螺栓无法解析依赖关系,因为它们是由ToplogyBuilder作为新对象创建的

例如:

TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("rabbitMqSpout", new RabbitListnerSpout(), 1);
    builder.setBolt("mapBolt", new GroupingBolt(), 1).shuffleGrouping("rabbitMqSpout");
    builder.setBolt("reduceBolt", new PublishingBolt(), 1).shuffleGrouping("mapBolt");

使用new创建它们的那一刻,它们就超出了Spring上下文的范围。可以通过将applicationContext作为构造函数发送来解决这个问题。

所以你可以把它当做,

TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("rabbitMqSpout", new RabbitListnerSpout(appContext), 1);
    builder.setBolt("mapBolt", new GroupingBolt(appContext), 1).shuffleGrouping("rabbitMqSpout");
    builder.setBolt("reduceBolt", new PublishingBolt(appContext), 1).shuffleGrouping("mapBolt");

通过这种方式,可以使用喷嘴和螺栓。因此,当你启动集群时,它们仍然可用。

P. S-

更新后,由于无法序列化appContext,上述操作将无法在远程群集上运行。要使spring在远程集群上工作,必须在open中定义和初始化上下文,并准备喷口和螺栓的方法。

 类似资料:
  • 在我的拓扑中,当元组从spout转移到bolt或从bolt转移到bolt时,我看到大约1-2 ms的延迟。我使用纳秒时间戳来计算延迟,因为整个拓扑运行在单个Worker中。拓扑是在集群中运行的,集群运行在具有生产能力的硬件中。 根据我的理解,在这种情况下,元组不需要序列化/反序列化,因为所有东西都在单个JVM中。我已经将大多数喷流和螺栓的并行性提示设置为5,并且喷流仅以每秒100的速率产生事件。我

  • 因此,如果您使用基于JUnit的单元测试,是否建议您运行一个小型模拟拓扑(?)并测试该拓扑下的(或)的隐含契约?或者,是否可以使用JUnit,但这意味着我们必须仔细模拟Bolt的生命周期(创建它、调用、嘲弄等)?在这种情况下,被测类(螺栓/喷口)有哪些一般的测试点需要考虑? 其他开发人员在创建正确的单元测试方面做了什么? 我注意到有一个拓扑测试API(参见:https://github.com/x

  • 我有一个EvaluationBolt(用于内存监视),我希望确保每个工作进程上运行一个执行器(在我的例子中,每个物理节点运行一个执行器,即supervisor.slots.ports只配置为端口6700)。在题目上我发现了这个问题: 干杯,孙铁麟

  • 这道题是 LeetCode 42 题。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 这道题乍一看和 LeetCode 84 柱状图中最大的矩形很像。事实上,84 题的很多解法都可以套到这道题上。 通用的优化方法 这道题有一个通用的优化方法。把柱子想象成下图的曲线,雨水只能存储在柱子之间的“谷”里,因此可以跳过左侧和右侧的上升坡,只遍历中间的柱

  • 假设我在Storm集群中有2个喷口和3个螺栓,并且有两个工人节点。这些喷口和螺栓将在这些工人之间共享(例如第一个工人有1个喷口和2个螺栓,第二个工人有1个喷口和1个螺栓)还是每个工人有2个喷口和3个螺栓,最终在整个集群中有4个喷口和6个螺栓?

  • 我正在本地开发一个Storm拓扑。我正在使用Storm 0.9.2孵化,并开发了一个简单的拓扑。当我使用LocalCluster()选项部署它时,它工作得很好,但它不会显示在我的Storm UI中,它只是执行而已。 当我定期部署它时,它会在我的Storm UI中显示拓扑结构,但当我单击它时,不会看到喷口或螺栓。 我还尝试了许多Storm启动项目中的示例WordCountTopology。同样的行为