开发者社区> 问答> 正文

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 '/'

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


展开
收起
爱吃鱼的程序员 2020-06-14 15:01:22 1080 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

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

    引用来自“xuanye_dtdream”的评论

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

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

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

    2020-06-14 15:01:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于RocketMQ Prometheus Exporter 立即下载
基于RocketMQ Connect 构建全新数据流转处理平 立即下载
RocketMQ Client-GO 介绍 立即下载