java - rabbitmq 无法与 java 一起使用

标签 java python rabbitmq

我的机器上安装了rabbitmq,它有3个不同的队列。一个 java 代码正在监听队列,而其他队列正在向 python 代码发送消息。现在 python 代码工作正常,但 java 代码似乎对 AMQ 有问题。出现以下错误:

Exception in thread "main" com.rabbitmq.client.PossibleAuthenticationFailureException: Possibly caused by authentication failure
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:341)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:590)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612)
    at com.elki.test.Worker.main(Worker.java:73)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
    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.rpc(AMQChannel.java:202)
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:326)
    ... 3 more
Caused by: java.io.EOFException
    at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:290)
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:139)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:532)
    at java.lang.Thread.run(Thread.java:744)

为什么 java 会出现 AuthenticationFailure 而 python 却不会。 任何帮助表示赞赏。

代码:

public static void main(String[] argv)
                          throws java.io.IOException,
                          java.lang.InterruptedException {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        com.rabbitmq.client.Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        channel.basicQos(1);

        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(TASK_QUEUE_NAME, false, consumer);

        while (true) {
          QueueingConsumer.Delivery delivery = consumer.nextDelivery();
          String message = new String(delivery.getBody());

          System.out.println(" [x] Received '" + message + "'");



          "do some work"
        System.out.println(" [x] Done" );

          int prefetchCount = 1;
          channel.basicQos(prefetchCount);
          channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        }
      }

最佳答案

我怀疑这是因为您没有在 ConnectionFactory 对象上设置密码用户名,因此无法进行身份验证与RabbitMQ。 (也许您的 Python 代码正在传递这些内容,因此可以进行身份​​验证。)

尝试在调用factory.newConnection之前添加此代码:

factory.setUsername(userName);
factory.setPassword(password);

根据代码需要替换userNamepassword

关于java - rabbitmq 无法与 java 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074945/

相关文章:

php - 如何将 EntityManager 注入(inject) RabbitMQBundle 消费者

php - 在 Windows 10 和 PHP 7.3 中安装 AMQP

c# - 健康检查 MassTransit 和 Rabbitmq

java - XPath 通配符

java - 在电梯中实现优先队列

python - 有没有办法在 Flask WTForms 中创建数据列表字段?

python - 如何检查可迭代对象是否允许多次通过?

python - 如何对特定行的 Pandas 列求和

java - Libgdx如何存储碰撞检测数据

java - 覆盖父类和接口(interface)中存在的方法(具有相同的签名)