3
respostas

[Dúvida] Não consigo criar uma queue pelo projeto java

Oi, pessoal ! Estou com um problema na minha aplicação e não consigo avançar. Meu projeto roda todo ok, porém quando eu coloco essa linha na classe de configuração:

    @Bean
    public Queue paymentCompletedQueue() {
        return new Queue("payment.completed", true);
    }

Essa exception estoura e a aplicação se encerra:


com.rabbitmq.client.MalformedFrameException: AMQP protocol version mismatch; we are version 0-9-1, server sent signature 3,1,0,0
    at com.rabbitmq.client.impl.Frame.protocolVersionMismatch(Frame.java:178) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:107) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:199) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:687) ~[amqp-client-5.21.0.jar:5.21.0]
    at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]

2024-05-24T16:26:04.418-03:00 ERROR 10012 --- [payment] [:0:0:0:0:1:5672] c.r.c.impl.ForgivingExceptionHandler     : An unexpected connection driver error occurred

com.rabbitmq.client.MalformedFrameException: AMQP protocol version mismatch; we are version 0-9-1, server sent signature 3,1,0,0
    at com.rabbitmq.client.impl.Frame.protocolVersionMismatch(Frame.java:178) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:107) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:199) ~[amqp-client-5.21.0.jar:5.21.0]
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:687) ~[amqp-client-5.21.0.jar:5.21.0]
    at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]

2024-05-24T16:26:04.468-03:00 ERROR 10012 --- [payment] [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.amqp.AmqpIOException: java.io.IOException
    at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:70) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:622) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:726) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:257) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2249) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2222) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2202) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:699) ~[spring-rabbit-3.1.5.jar:3.1.5]
    at mirna.food.payment.infra.amqp.config.PaymentAMQPConfiguration.lambda$0(PaymentAMQPConfiguration.java:27) ~[classes/:na]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) ~[spring-context-6.1.8.jar:6.1.8]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) ~[spring-context-6.1.8.jar:6.1.8]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) ~[spring-context-6.1.8.jar:6.1.8]

O mesmo ocorre quando eu também coloco isso:

    @Bean
    public Queue paymentCompletedQueue() {
return QueueBuilder.nonDurable("payment.completed").build();
}

Ou seja, é um problema originado da criação de filas. Alguém ja viu isso antes ?

3 respostas

Oi, Mirna! Tudo joia?

Parece que você está enfrentando um problema de incompatibilidade de versão do protocolo AMQP entre o cliente RabbitMQ e o servidor RabbitMQ. A exceção AMQP protocol version mismatch indica que o cliente está tentando se comunicar usando a versão 0-9-1 do protocolo, enquanto o servidor está respondendo com uma assinatura de versão diferente.

Aqui estão alguns passos que você pode seguir para tentar resolver esse problema:

  1. Verifique a versão do RabbitMQ Server: Certifique-se de que a versão do RabbitMQ Server que você está usando é compatível com a versão do cliente que você está utilizando em seu projeto Java. Você pode verificar a versão do RabbitMQ Server acessando o painel de administração do RabbitMQ ou executando o comando rabbitmqctl status no servidor onde o RabbitMQ está instalado.

  2. Atualize a Biblioteca do Cliente: Certifique-se de que você está usando a versão mais recente da biblioteca amqp-client no seu projeto. Você pode atualizar a dependência no seu arquivo pom.xml (se estiver usando Maven) ou build.gradle (se estiver usando Gradle). Por exemplo, no Maven:

    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.21.0</version>
    </dependency>
    
  3. Configuração do RabbitMQ: Verifique se há alguma configuração específica no RabbitMQ Server que possa estar causando a incompatibilidade de protocolo. Por exemplo, certifique-se de que o RabbitMQ está configurado para aceitar conexões na versão do protocolo que você está usando.

Espero que essas dicas ajudem a resolver o seu problema!

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi, Armano !

Verifique a versão do RabbitMQ Server

Minha versão é 3.10.1

Atualize a Biblioteca do Cliente

Estou usando essa exata versão

Configuração do RabbitMQ: Verifique se há alguma configuração específica no RabbitMQ Server que possa estar causando a incompatibilidade de protocolo. Por exemplo, certifique-se de que o RabbitMQ está configurado para aceitar conexões na versão do protocolo que você está usando.

Onde posso ver isso no painel de administração ?

Olá! O mesmo está acontecendo comigo. Você conseguiu resolver?