editor php Xinyi memperkenalkan kepada anda hari ini Spring AMQP, iaitu rangka kerja pemesejan berdasarkan protokol AMQP. Walau bagaimanapun, kadangkala apabila menggunakan Spring AMQP, kami mungkin menghadapi ralat: "Tiada mekanisme pengesahan yang serasi ditemui - menyediakan pelayan". Mesej ralat ini boleh mengelirukan dan anda tidak tahu bagaimana untuk menyelesaikannya. Seterusnya, kami akan menerangkan punca ralat ini secara terperinci dan menyediakan penyelesaian untuk membantu anda menggunakan rangka kerja Spring AMQP dengan lancar.
Saya cuba menyambungkan aplikasi but spring ke rabbit mq (https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl) melalui mekanisme pengesahan luaran.
Saya mendapat ralat berikut:
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
Pergantungan:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-amqp</artifactid> <version>3.2.1</version> </dependency>
versi rabbitmq: rabbitmq:3.12.1-pengurusan
rabbitmq.conf mengandungi sifat-sifat ini:
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
Sifat Permohonan:
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
Saya mengisytiharkan kaedah berikut untuk memasukkan konfigurasi sasl:
@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; }
Saya tidak pasti apakah listeners.ssl.default=5672
pada bahagian konfigurasi rabbitmq, tetapi nampaknya anda mengatasi port ssl lalai untuk itu.
Logik dalam but spring adalah seperti berikut:
return (optional.ofnullable(getssl().getenabled()).orelse(false)) ? default_port_secure : default_port;
Lokasi:
private static final int default_port_secure = 5671;
Jadi, anda mungkin ingin mempertimbangkan untuk menyediakan pelabuhan secara eksplisit:
spring.rabbitmq.port=5672
Anda mungkin tidak perlu menyesuaikan sama ada rabbittemplate
bean,只需添加 connectionfactorycustomizer
即可将 defaultsaslconfig.external
设置为自动配置的 com.rabbitmq.client.connectionfactory
.
Tidak disyorkan untuk menggunakan setautomaticrecoveryenabled(true)
: https://www.php.cn/link/3c0de3fec9ab8a3df01109251f137119
Atas ialah kandungan terperinci Spring amqp - Tiada mekanisme pengesahan yang serasi ditemui - menyediakan pelayan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!