php小編新一今天為大家介紹的是Spring AMQP,它是一種基於AMQP協(xié)定的訊息傳遞框架。然而,有時(shí)在使用Spring AMQP時(shí),我們可能會(huì)遇到一個(gè)錯(cuò)誤:「未找到相容的身份驗(yàn)證機(jī)制 - 提供伺服器」。這個(gè)錯(cuò)誤提示可能會(huì)讓人感到困惑,不知道該如何解決。接下來,我們將詳細(xì)解釋這個(gè)錯(cuò)誤的原因,並提供解決方案,幫助大家順利使用Spring AMQP框架。
問題內(nèi)容
我正在嘗試透過外部驗(yàn)證機(jī)制將spring boot 應(yīng)用程式連接到rabbit mq (https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl) 。
我收到以下錯(cuò)誤:
org.springframework.amqp.amqpioexception: java.io.ioexception: no compatible authentication mechanism found - server offered [] at org.springframework.amqp.rabbit.support.rabbitexceptiontranslator.convertrabbitaccessexception(rabbitexceptiontranslator.java:70) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.connection.abstractconnectionfactory.createbareconnection(abstractconnectionfactory.java:594) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.connection.cachingconnectionfactory.createconnection(cachingconnectionfactory.java:687) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.connection.connectionfactoryutils.createconnection(connectionfactoryutils.java:257) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.core.rabbittemplate.doexecute(rabbittemplate.java:2225) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.core.rabbittemplate.execute(rabbittemplate.java:2198) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.core.rabbittemplate.execute(rabbittemplate.java:2178) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.core.rabbitadmin.getqueueinfo(rabbitadmin.java:459) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.core.rabbitadmin.getqueueproperties(rabbitadmin.java:443) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.listener.abstractmessagelistenercontainer.attemptdeclarations(abstractmessagelistenercontainer.java:1891) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.listener.abstractmessagelistenercontainer.redeclareelementsifnecessary(abstractmessagelistenercontainer.java:1858) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.listener.simplemessagelistenercontainer$asyncmessageprocessingconsumer.initialize(simplemessagelistenercontainer.java:1384) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.listener.simplemessagelistenercontainer$asyncmessageprocessingconsumer.run(simplemessagelistenercontainer.java:1230) ~[spring-rabbit-3.0.5.jar:3.0.5] at java.base/java.lang.thread.run(thread.java:833) ~[na:na] caused by: java.io.ioexception: no compatible authentication mechanism found - server offered [] at com.rabbitmq.client.impl.amqconnection.start(amqconnection.java:343) ~[amqp-client-5.17.0.jar:5.17.0] at com.rabbitmq.client.connectionfactory.newconnection(connectionfactory.java:1225) ~[amqp-client-5.17.0.jar:5.17.0] at com.rabbitmq.client.connectionfactory.newconnection(connectionfactory.java:1173) ~[amqp-client-5.17.0.jar:5.17.0] at org.springframework.amqp.rabbit.connection.abstractconnectionfactory.connectaddresses(abstractconnectionfactory.java:632) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.connection.abstractconnectionfactory.connect(abstractconnectionfactory.java:607) ~[spring-rabbit-3.0.5.jar:3.0.5] at org.springframework.amqp.rabbit.connection.abstractconnectionfactory.createbareconnection(abstractconnectionfactory.java:557) ~[spring-rabbit-3.0.5.jar:3.0.5] ... 12 common frames omitted
依賴關(guān)係:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-amqp</artifactid> <version>3.2.1</version> </dependency>
rabbitmq版本:rabbitmq:3.12.1-management
rabbitmq.conf 包含這些屬性:
default_user=guest default_pass=guest listeners.tcp=none listeners.ssl.default=5672 ssl_options.cacertfile=/etc/rabbitmq/cert/ca_bundle.pem ssl_options.certfile=/etc/rabbitmq/cert/certificate.pem ssl_options.keyfile=/etc/rabbitmq/cert/key.pem ssl_options.password=pass ssl_options.verify=verify_peer ssl_options.fail_if_no_peer_cert=true ssl_options.versions.1=tlsv1.2 ssl_options.depth=1 auth_mechanisms.1=external ssl_cert_login_from=common_name
應(yīng)用程式屬性:
spring.rabbitmq.ssl.enabled=true spring.rabbitmq.ssl.algorithm=tlsv1.2 spring.rabbitmq.ssl.key-store=keystore.p12 spring.rabbitmq.ssl.key-store-password=pass spring.rabbitmq.ssl.key-store-type=pkcs12 spring.rabbitmq.ssl.trust-store=truststore.p12 spring.rabbitmq.ssl.trust-store-password=pass spring.rabbitmq.ssl.trust-store-type=pkcs12
我宣告了以下方法來包含 sasl 設(shè)定:
@Bean public AmqpTemplate amqpTemplate(ConnectionFactory connectionFactory) { CachingConnectionFactory cachingConnectionFactory = (CachingConnectionFactory) connectionFactory; cachingConnectionFactory.getRabbitConnectionFactory().setAutomaticRecoveryEnabled(true); cachingConnectionFactory.getRabbitConnectionFactory().setSaslConfig(DefaultSaslConfig.EXTERNAL); cachingConnectionFactory.resetConnection(); RabbitTemplate rabbitTemplate = new RabbitTemplate(cachingConnectionFactory); rabbitTemplate.setMessageConverter(converter()); return rabbitTemplate; }
解決方法
我不確定rabbitmq 配置端的listeners.ssl.default=5672
是什麼,但聽起來您將預(yù)設(shè)的ssl 連接埠覆蓋到該端口。
spring boot中的邏輯是這樣的:
return (optional.ofnullable(getssl().getenabled()).orelse(false)) ? default_port_secure : default_port;
地點(diǎn):
private static final int default_port_secure = 5671;
因此,可能需要考慮明確提供該連接埠:
spring.rabbitmq.port=5672
您可能也不需要自訂rabbittemplate
bean,只需新增connectionfactorycustomizer
即可將defaultsaslconfig.external
設(shè)定為自動(dòng)配置的com .rabbitmq.client.connectionfactory
。
也不建議使用 setautomaticrecoveryenabled(true)
: http://m.miracleart.cn/link/3c0de3fec9ab8a3df01109251f137119
以上是Spring amqp - 未找到相容的身份驗(yàn)證機(jī)制 - 提供伺服器的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)