2
回答
rabbitmq 远程连接 绑定交换机 错误!!

今天才接触rabbitmq 尝试着远程连接 出现如下问题 

no exchange 'amq.gen-dph9b_NNsklGAYLcScl2aA' in vhost '/'

这个问题是绑定交换机才出现的,不绑定交换机,直接连接指定队列,是没有错的,能收到消息

String queue = channel.queueDeclare().getQueue();
channel.queueBind(queue, EXCHANGE_NAME, "");



产生随机名队列,然后绑定名为EXCHANGE_NAME的交换机

factory.setHost("192.168.100.186");
factory.setPort(5672);
factory.setUsername("rabbitmq");
factory.setPassword("rabbitmq");



以上是连接代码

本机产生的能够收到消息,没错

远程的在启动的时候就报错了,一下是错误代码:

Exception in thread "main" java.io.IOException
	at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
	at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
	at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:124)
	at com.rabbitmq.client.impl.ChannelN.exchangeBind(ChannelN.java:738)
	at com.rabbitmq.client.impl.ChannelN.exchangeBind(ChannelN.java:751)
	at com.rabbitmq.client.impl.ChannelN.exchangeBind(ChannelN.java:61)
	at Rev.Rev.main(Rev.java:31)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'amq.gen-Q0hpa_A3bGWdF_g0LyzTwA' in vhost '/', class-id=40, method-id=30)
	at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
	at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
	at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
	at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216)
	at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
	... 4 more
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'amq.gen-Q0hpa_A3bGWdF_g0LyzTwA' in vhost '/', class-id=40, method-id=30)
	at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:478)
	at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:315)
	at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:144)
	at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:91)
	at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:550)
	at java.lang.Thread.run(Unknown Source)



但是在我直接声明队列名称,不绑定交换机的时候,远程是不抱错的,能收到消息...

某度和某歌搜索no exchange 'amq.gen-dph9b_NNsklGAYLcScl2aA' in vhost '/'

完全没有有用的信息....


举报
Kylin_Shaw
发帖于3年前 2回/7K+阅
共有2个答案 最后回答: 3年前

1.rabbitmq会有默认的exchange,rabbitmqctl list_exchanges可以查看,所以你不指定exchange,会使用默认的exchange;

2.发送消息,指定queuename 是可以的,routingkey如果指定为queue-name也是可以的,这样做只能一个queue收到,其他queue收不到了。

3.一般不建议使用指定queue name.因为消息队列本身就是松耦合的,消息发布者不应该去关心queue name的。

引用来自“xuanye_dtdream”的评论

1.rabbitmq会有默认的exchange,rabbitmqctl list_exchanges可以查看,所以你不指定exchange,会使用默认的exchange;

2.发送消息,指定queuename 是可以的,routingkey如果指定为queue-name也是可以的,这样做只能一个queue收到,其他queue收不到了。

3.一般不建议使用指定queue name.因为消息队列本身就是松耦合的,消息发布者不应该去关心queue name的。

有段时间没上了,没有注意到,谢谢啊
顶部