前因
今天在编写flink的source部分时,需要由RabbitMQ处获取信息,在此之前已经成功完成了从flink中的sink向RabbitMQ注入数据部分,并且RabbitMQ(下文简称MQ)服务器部分显示信息成功接受,目前正由MQ平台托管,等待接受
由于成功注入数据,因此source部分也就照抄了sink部分的配置,完成了基础程序的编写之后
final RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
.setPrefetchCount(5)
.setHost("localhost")
.setPort(5672)
.setUserName("admin")
.setPassword("admin")
.setVirtualHost("tutu")
.build();
final DataStream<String> TStream = env
.addSource(new RMQSource<String>(
connectionConfig,
"TWarning",
true,
new SimpleStringSchema()))
.setParallelism(1);
TStream.print();
然后运行!
报错原因
不出意外的话是要出意外了,果然
Caused by: com.rabbitmq.client.ShutdownSignalException: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - consumer prefetch count is not set for 'queue 'TWarning' in vhost 'tutu'', class-id=60, method-id=20)
at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:517)
at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:341)
at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182)
at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114)
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:739)
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:666)
... 1 more
图片如下
报错的核心内容是 consumer prefetch count is not set for 'queue 'TWarning' in vhost 'tutu'',大概意思是没有设置 prefetch count,我一看代码,不对啊,我设置过了的啊,就在代码第二行(也有可能是让我在服务器段设置,但新手小白的我是真的不会设置啊!!
解决问题
于是就迈上了漫长的百度,bing,google,ChatGPT,CSDN之旅,无奈全都没用。正当我绝望之际。正当这时,我遇到了一篇文章忽然注意到了他的virtual host中的queue类型为Classic,这时我开始回想我的Default Queue Type选择的是什么呢......坏了,好像不是Classic而是Stream
于是删除virtual host,重新设置,问题解决!
成功输入!
成功接收!
附: exit code 130是因为我强行停止了程序