springboot集成rabbitmq链接出差

错误报文如下:

Exception in thread "main" java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:126) at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:122) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:144) at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:947) at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:333) at com.example.hgx.HgxApplicationTests.main(HgxApplicationTests.java:30) Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - access to queue hello in vhost / refused for user hgx2, class-id=50, method-id=10) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:494) at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:288) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:138) ... 3 more Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - access to queue hello in vhost / refused for user hgx2, class-id=50, method-id=10) at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:504) at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346) at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178) at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111) at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643) at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:581)

at java.lang.Thread.run(Thread.java:748)

程序是在网上借鉴的,如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HgxApplicationTests {

   private final static String QUEUE_NAME = "hello";

   public static void main(String[] args) throws IOException, TimeoutException {
      ConnectionFactory factory = new ConnectionFactory();
      factory.setHost("192.168.20.22");
      factory.setUsername("hgx2");
      factory.setPassword("hgx2");
      factory.setVirtualHost("/");
      factory.setPort(5672);
      Connection connection = factory.newConnection();
      Channel channel = connection.createChannel();

      channel.queueDeclare(QUEUE_NAME, false, false, false, null);
      String message = "Hello World!";
      channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
      System.out.println(" [x] Sent " + message + "");

      channel.close();
      connection.close();
   }

}

错误原因:

1.确认用户(hgx2)拥有远程登录的权限的角色,这点你用你用自己电脑的ip打开rmq的管理页面能登录就行。

2.确认用户(hgx2)拥有服务器的读写权限。使用命令查询一下 看这个用户有没有"/"的权限 就是ramq的根目录下的所有权限。

本人错在第二点 只赋予了用户管理员角色但是没有赋予操作权限,才导致一直连接不上。

用:rabbitmqctl set_permissions -p "/" username ".*" ".*" ".*" 执行一下即可解决问题。

经验分享 程序员 微信小程序 职场和发展