Jas*_*Jas 1 java message-queue rabbitmq rmq que
这是我运行 main 时遇到的错误。我不太明白为什么第 44 行有问题:channel.basicConsume(Q,true,consumer); 我的目标是尝试将收到的消息存储到可以在其他文件中使用的变量中。
The error is: Exception in thread "main" java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:105)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:101)
at com.rabbitmq.client.impl.ChannelN.basicConsume(ChannelN.java:1255)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:471)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:461)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicConsume(AutorecoveringChannel.java:456)
at Recv.recv(Recv.java:44)
at mainLaptop.main(mainLaptop.java:11)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'Leonardo' in vhost '/', class-id=60, method-id=20)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:32)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:366)
at com.rabbitmq.client.impl.ChannelN.basicConsume(ChannelN.java:1253)
... 5 more
Run Code Online (Sandbox Code Playgroud)
这是我的 Recv 文件代码
public class Recv
{
public static String recv(String ip, String Q) throws Exception
{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(ip);
factory.setUsername("test");
factory.setPassword("test");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
MyConsumer consumer=new MyConsumer(channel);
channel.basicConsume(Q,true,consumer);
return consumer.getStoredMessage();
}
public static class MyConsumer extends DefaultConsumer
{
private String storedMessage;
public MyConsumer(Channel channel)
{
super(channel);
}
public String getStoredMessage()
{
return storedMessage;
}
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException
{
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
storedMessage = message; // store message here
}
}
}
Run Code Online (Sandbox Code Playgroud)
许多异常包含有用的信息,可以告诉您出了什么问题,以及可以采取哪些措施来解决这些问题。
在这种情况下,你的问题是我不太明白为什么第 44 行会出现问题:channel.basicConsume(Q,true,consumer);
即使堆栈跟踪很难看,您也需要阅读它,因为异常包含以下文本:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'Leonardo' in vhost '/', class-id=60, method-id=20)
错误非常明显。vshost '/' 中没有队列 'Leonardo'。您尚未Q在 RabbitMQ 服务器中声明队列(该队列以 string 形式传入)。因此,尝试从不存在的队列中消费是一个例外。首先声明队列,你的问题就会消失。
| 归档时间: |
|
| 查看次数: |
7677 次 |
| 最近记录: |