Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
Java 使用rabbitmq中的factory.setUri()连接到/vhost_Java_Rabbitmq_Amqp - Fatal编程技术网

Java 使用rabbitmq中的factory.setUri()连接到/vhost

Java 使用rabbitmq中的factory.setUri()连接到/vhost,java,rabbitmq,amqp,Java,Rabbitmq,Amqp,我有连接代码: ConnectionFactory factory = new ConnectionFactory(); factory.setUri(System.getenv("CLOUDAMQP_URL")); 但我有一个错误: 23:16:24 web.1 | started with pid 3098 23:16:27 web.1 | Exception in thread "main" java.io.IOException 23:16:27 web.1 |

我有连接代码:

ConnectionFactory factory = new ConnectionFactory();
factory.setUri(System.getenv("CLOUDAMQP_URL"));
但我有一个错误:

23:16:24 web.1    | started with pid 3098
23:16:27 web.1    | Exception in thread "main" java.io.IOException
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:378)
23:16:27 web.1    |     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:621)
23:16:27 web.1    |     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:648)
23:16:27 web.1    |     at Main.run(Main.java:212)
23:16:27 web.1    |     at Main.main(Main.java:239)
23:16:27 web.1    | Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
23:16:27 web.1    |     at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
23:16:27 web.1    |     at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:361)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:226)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
23:16:27 web.1    |     ... 5 more
23:16:27 web.1    | Caused by: java.net.SocketException: Connection reset
23:16:27 web.1    |     at java.net.SocketInputStream.read(SocketInputStream.java:196)
23:16:27 web.1    |     at java.net.SocketInputStream.read(SocketInputStream.java:122)
23:16:27 web.1    |     at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
23:16:27 web.1    |     at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
23:16:27 web.1    |     at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288)
23:16:27 web.1    |     at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
23:16:27 web.1    |     at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:139)
23:16:27 web.1    |     at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:536)
23:16:27 web.1    |     at java.lang.Thread.run(Thread.java:745)
23:16:27 web.1    | exited with code 1
23:16:27 system   | sending SIGTERM to all processes
我的兔子日志显示连接被拒绝

=ERROR REPORT==== 21-Jul-2015::23:16:27 ===
closing AMQP connection <0.9858.0> (127.0.0.1:38856 -> 127.0.0.1:5672):
{handshake_error,opening,0,
                 {amqp_error,access_refused,
                             "access to vhost '' refused for user 'guest'",
                             'connection.open'}}

看起来这与URI的解析方式不同。特别是,URI在/s上拆分,然后进行URL解码;这意味着我的URI(
amqp://guest:guest@localhost:5672/
)返回vhost的空字符串(而不是默认值/I通过使用

factory.setUri(System.getenv("CLOUDAMQP_URL"));
factory.setVirtualHost("/");
覆盖推断的错误值,但这是错误的解决方案。另一个有效解决方案是更改URL:

CLOUDAMQP_URL=amqp://guest:guest@localhost:5672/%2F
请注意URLencoded/via%2F。我将在库中打开一个问题/PR,因为python解决方案似乎更直观


编辑:我和库维护人员谈过。他们注意到他们是权威的实现,pika正在做一些外部的事情(见附录A)。不幸的是,stock rabbit实现(vhost为“/”)与stock java rabbit mq客户端对默认URI的解释不兼容,但事实确实如此。请使用%2F修复程序。

我猜问题在于授权,而不是
setUri
方法。
CLOUDAMQP\u URL
的值是多少?您指定了正确的登录名和密码吗?可能没有
guest的访问权限de>服务器上的用户。
CLOUDAMQP_URL=amqp://guest:guest@localhost:5672/%2F