Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache storm 如何通过编程插入消息来测试Storm拓扑的功能_Apache Storm_Apache Storm Topology - Fatal编程技术网

Apache storm 如何通过编程插入消息来测试Storm拓扑的功能

Apache storm 如何通过编程插入消息来测试Storm拓扑的功能,apache-storm,apache-storm-topology,Apache Storm,Apache Storm Topology,我们的ApacheStorm拓扑使用KafkaSpout监听来自Kafka的消息,并在执行大量映射/减少/丰富/聚合等操作后,最终将数据插入Cassandra。还有另一个kafka输入,在这里我们接收用户对数据的查询,如果topology找到响应,它会将其发送到第三个kafka主题。现在,我们想使用Junit编写E2E测试,在该测试中,我们可以直接以编程方式将数据插入拓扑,然后通过插入用户查询消息,我们可以在第三点断言在查询中收到的响应是正确的 为了实现这一点,我们考虑启动EmbeddedKaf

我们的ApacheStorm拓扑使用KafkaSpout监听来自Kafka的消息,并在执行大量映射/减少/丰富/聚合等操作后,最终将数据插入Cassandra。还有另一个kafka输入,在这里我们接收用户对数据的查询,如果topology找到响应,它会将其发送到第三个kafka主题。现在,我们想使用Junit编写E2E测试,在该测试中,我们可以直接以编程方式将数据插入拓扑,然后通过插入用户查询消息,我们可以在第三点断言在查询中收到的响应是正确的

为了实现这一点,我们考虑启动EmbeddedKafka和CassandraUnit,然后用它们替换实际的Kafka和Cassandra,然后我们可以在这个Junit测试的上下文中启动拓扑


但是我们的方法不适合JUnit,因为它使这些测试太庞大了。启动卡夫卡、卡桑德拉和拓扑学都需要花费大量的时间和资源。Apache Storm中是否有任何东西可以支持我们计划编写的测试类型?

这里有许多选项,这取决于您可以忍受的减速类型:

正如您所提到的,您可以启动卡夫卡、卡桑德拉和拓扑。这是最慢的选择,也是最现实的选择

启动Kafka和Cassandra一次,并在所有测试中重用它们。您可以对Storm LocalCluster执行相同的操作。在每次测试之间清除卡夫卡/卡桑德拉可能会更快,例如删除所有主题而不是重新启动它们

用测试中的短棒更换卡夫卡喷嘴/螺栓和卡桑德拉螺栓。Storm有许多内置的工具用于短截头螺栓和喷嘴,例如,LocalCluster中的FixedTupleSpoot、FeederSpout、tracked拓扑和completable拓扑功能。通过这种方式,您可以在拓扑中插入一些固定元组,并断言哪些元组被发送到Cassandra bolt存根。这里有一些这样的功能和

最后,您当然可以对单个螺栓进行单元测试。这是最快的一种测试。可以使用Testing.testTuple创建要传递给螺栓的测试元组


谢谢你的回答。是否有Java API可以告诉我们拓扑何时可以执行?因为在测试开始之前,我正在提交我的拓扑,在它准备好执行之前,我的测试执行完成并失败。我需要一个Java API,它可以帮助我等待拓扑准备就绪。请发布另一个问题,这样其他人在有相同问题时可以找到它。在这里问这个问题-我尝试了你的建议,但面临一个问题。在这里发布新问题-