我有一个简单的Web应用程序,可以向RabbitMQ Server发送消息。我可以在我的本地机器上执行此应用程序。但是当我将设置移动到Amazon Server时,它会在服务器启动时出现以下错误:
Exception in thread "SimpleAsyncTaskExecutor-1" org.springframework.amqp.UncategorizedAmqpException: java.lang.NullPointerException
at org.springframework.amqp.rabbit.support.RabbitUtils.convertRabbitAccessException(RabbitUtils.java:120)
at org.springframework.amqp.rabbit.support.RabbitUtils.closeMessageConsumer(RabbitUtils.java:141)
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.stop(BlockingQueueConsumer.java:157)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.restart(SimpleMessageListenerContainer.java:345)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$600(SimpleMessageListenerContainer.java:49)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:431)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.NullPointerException
at com.rabbitmq.client.impl.ValueWriter.writeShortstr(ValueWriter.java:48)
at com.rabbitmq.client.impl.MethodArgumentWriter.writeShortstr(MethodArgumentWriter.java:76)
at com.rabbitmq.client.impl.AMQImpl$Basic$Cancel.writeArgumentsTo(AMQImpl.java:2645)
at com.rabbitmq.client.impl.Method.toFrame(Method.java:90)
at com.rabbitmq.client.impl.AMQCommand.transmit(AMQCommand.java:168)
at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:301)
at com.rabbitmq.client.impl.AMQChannel.quiescingTransmit(AMQChannel.java:283)
at com.rabbitmq.client.impl.AMQChannel.quiescingRpc(AMQChannel.java:218)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:209)
at com.rabbitmq.client.impl.ChannelN.basicCancel(ChannelN.java:815)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:223)
at $Proxy18.basicCancel(Unknown Source)
at org.springframework.amqp.rabbit.support.RabbitUtils.closeMessageConsumer(RabbitUtils.java:128)
... 5 more
在Amazon Server上正确配置了RabbitMQ,Erlang,Jetty服务器。我还在服务器上启用了端口8088,5672(不知道此错误是否与端口有关或什么)。任何人都可以指导我哪些问题可能导致此错误。
答案 0 :(得分:1)
此错误是因为 mnesia 中未定义任何队列。 mnesia文件夹下的队列文件夹不在Amazon服务器上。
该项目正在使用本地计算机,因为可能是在我开发项目时,队列在mnesia中保留了一些我稍后删除的代码。当我在本地机器上执行代码时,它总是找到持久队列并且不会给出错误。当我在本地机器上更改队列名称时,它开始给我同样的错误。
所以我发现在使用之前我没有声明队列。所以我在Spring配置文件中添加以下行:
<rabbit:queue name="myQueue"/>
之后,这些项目在本地和亚马逊机器上都能正常运行。