php-Editor Xinyi stellt Ihnen heute Spring AMQP vor, ein Messaging-Framework, das auf dem AMQP-Protokoll basiert. Bei der Verwendung von Spring AMQP kann es jedoch manchmal zu einer Fehlermeldung kommen: „Kein kompatibler Authentifizierungsmechanismus gefunden – Bereitstellungsserver“. Diese Fehlermeldung kann verwirrend sein und Sie wissen nicht, wie Sie sie lösen können. Als nächstes erklären wir die Ursache dieses Fehlers im Detail und stellen Lösungen bereit, die jedem helfen, das Spring AMQP-Framework reibungslos zu nutzen.
Ich versuche, eine Spring-Boot-Anwendung über einen externen Authentifizierungsmechanismus mit Rabbit MQ (https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl) zu verbinden.
Ich erhalte die folgende Fehlermeldung:
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
Abhängigkeiten:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-amqp</artifactid> <version>3.2.1</version> </dependency>
rabbitmq-Version: Rabbitmq:3.12.1-management
rabbitmq.conf enthält diese Eigenschaften:
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
Anwendungseigenschaften:
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
Ich habe die folgende Methode deklariert, um die SASL-Konfiguration einzuschließen:
@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; }
Ich bin mir nicht sicher, was das listeners.ssl.default=5672
auf der Seite der RabbitMQ-Konfiguration ist, aber es hört sich so an, als würden Sie den Standard-SSL-Port dafür überschreiben.
Die Logik im Spring Boot ist wie folgt:
return (optional.ofnullable(getssl().getenabled()).orelse(false)) ? default_port_secure : default_port;
Standort:
private static final int default_port_secure = 5671;
Vielleicht sollten Sie erwägen, den Port explizit anzugeben:
spring.rabbitmq.port=5672
Wahrscheinlich müssen Sie auch keine Anpassungen vornehmen rabbittemplate
bean,只需添加 connectionfactorycustomizer
即可将 defaultsaslconfig.external
设置为自动配置的 com.rabbitmq.client.connectionfactory
.
Es wird nicht empfohlen, setautomaticrecoveryenabled(true)
zu verwenden: https://www.php.cn/link/3c0de3fec9ab8a3df01109251f137119
Das obige ist der detaillierte Inhalt vonSpring amqp – Kein kompatibler Authentifizierungsmechanismus gefunden – Bereitstellungsserver. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!