我尝试使用spout构建风暴/苍鹭拓扑,该spout从RabbitMQ队列获取数据并将其传递给将数据发送到另一个队列的bolt。我还在这里学习,所以我尝试使用这个项目来构建我的拓扑结构:https://github.com/redink/storm-rabbitmq/tree/master/storm-rabbitmq-test
我的拓扑:
public class Topology {
public static void main(String[] args) throws Exception
{
TopologyBuilder builder = new TopologyBuilder();
QueueDeclaration qd = new ExclusiveQueueWithBinding("rabbit-heron-input", "rabbit-heron-input");
Scheme scheme = new BasicScheme();
builder.setSpout( "spout", new AMQPSpout("localhost", 5672, "guest", "guest", "/", qd, scheme));
builder.setBolt( "rabbitbolt", new EndBolt(),1 )
.shuffleGrouping("spout");
Config conf = new Config();
conf.setDebug(true);
conf.setNumWorkers(1);
conf.setMaxSpoutPending(5000);
try{
StormSubmitter.submitTopology("testingrabbitheron", conf, builder.createTopology() );
}
catch(AlreadyAliveException e){ }
}
}
我的pom.xml:
<dependencies>
<dependency>
<groupId>com.twitter.heron</groupId>
<artifactId>heron-storm</artifactId>
<version>0.14.5.1</version>
</dependency>
<dependency>
<groupId>org.clojars.storm-amqp</groupId>
<artifactId>storm-amqp-spout</artifactId>
<version>0.2.7-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.clojars.pdoctor</groupId>
<artifactId>storm-json</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.10.1.1</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>github-releases</id>
<url>http://oss.sonatype.org/content/repositories/github-releases/</url>
</repository>
<repository>
<id>clojars.org</id>
<url>http://clojars.org/repo</url>
</repository>
</repositories>
我已经有了兔子 - 苍鹭 - 输入交换,它被绑定到带有路由键rabbit-heron-input的rabbitmq-heron-input队列。
每次激活此拓扑时,它始终会创建一个新队列,而不是连接到现有队列。我尝试向rabbitmq-heron-input队列发送消息,但是它没有被spout检测到。当我检查RabbitMQ管理网页时,它会显示一个新的队列(名称为amq.gen-dWg3pmSodeL7lZ0coMAXNw),它有一个连接的消费者(我假设是鲸鱼喷水,因为我在当地环境中工作)。
有人可以帮忙吗?