首页 文章

具有RabbitMQ客户端身份验证异常的QPID代理

提问于
浏览
4

我正在使用Java QPID代理进行测试 . 我能够使用质子客户端发送和接收消息,但使用匿名身份验证 . 我感兴趣的是打开身份验证测试,并了解质子客户端不支持(尚未) . 因此我下载了rabbitMQ客户端jar . 我正在使用密码文件身份验证(QPID附带) .

我像这样设置我的RabbitMQ客户端连接工厂:

connectionFactory = new ConnectionFactory();
    connectionFactory.setHost("localhost");
    connectionFactory.setUsername("guest");
    connectionFactory.setPassword("guest");

代码在此行上失败(特别是在getConnection上) .

connection = RabbitMQConnectionFactory.getInstance().getConnection();

这是例外:

java.io.IOException:找不到兼容的身份验证机制 - 服务器在com.rabbitmq.client.ConnectionFactory.newConnection上的com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:309)提供了[CRAM-MD5] . ConnectionFactory.java:590)位于com.vue.rabbit.producer的com.vue.rabbit.core.RabbitMQConnectionFactory.getConnection(RabbitMQConnectionFactory.java:37)的com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:612) .SimpleProducer.main(SimpleProducer.java:25)

如果我更改QPID代理以使用匿名身份验证并且还更改客户端而不是设置用户/密码,我会得到类似的例外“服务器提供[ANONYMOUS]”

难道我做错了什么?这些应该兼容吗?有些单独的问题是,如果它们都支持相同的在线AMQP协议,为什么会有Java和C QPID代理?在此先感谢您的帮助!

2 回答

  • 1

    实际上,最新的QPID支持普通SASL,但不建议这样做 . 见documentation . 在你的 config.json 中包括如下内容: "secureOnlyMechanisms": [] ,如:

    "authenticationproviders" : [ {
        "id" : "798fc4a5-8edb-4b42-b1b2-8f7e9be8cccb",
        "name" : "passwordFile",
        "type" : "PlainPasswordFile",
        "path" : "${qpid.home_dir}${file.separator}etc${file.separator}passwd",
        "secureOnlyMechanisms": [],
        "preferencesproviders" : [ {
          "id" : "1dcee789-be1b-49cc-9032-3bc4b974d1d6",
          "name" : "fileSystemPreferences",
          "type" : "FileSystemPreferences",
          "path" : "${qpid.work_dir}${file.separator}user.preferences.json"
        } ]
    
  • 4

    您使用的是什么版本的Java Broker?

    如果答案是0.30,则PlainPasswordFile / Base64MD5PasswordFile身份验证提供程序(前者是附带配置中的默认设置)仅在客户端使用配置了SSL的AMQP端口时才向客户端提供PLAIN SASL机制 . 这样做是为了防止密码在未受保护的端口上以明文形式传播 .

相关问题