RabbitMQ et SpringBoot remplissant la fosse d'intégration com.rabbitmq.client.ShutdownSignalException : méthode de protocole d'erreur de canal :

Le milieu du message RabbitMQ est connecté aux deux extrémités du producteur de message et du consommateur de message

Mais l'intégration de SpringBoot, et la version est en

<spring-boot.version>2.6.13</spring-boot.version>

Consommateur de message, démarrer le rapport d'erreur

L'expéditeur du message envoie un message d'erreur,

com.rabbitmq.client.ShutdownSignalException : méthode de protocole d'erreur de canal :

La cause première du problème de suivi est que les files d'attente, les commutateurs et les liaisons n'existent pas, il y a donc un problème.

La solution est simple

1. Créez manuellement des commutateurs, des files d'attente et des relations de liaison associés dans RabbitMQ

2. Solution côté code

consommateur de messages

Utilisez comme suit

package com.example.rabbitmqb.config;


import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;


@Component
public class RabbitMQConfig {

    @RabbitListener(queuesToDeclare = {@Queue("boot_queue")})
    public void ListenerQueues(Message message) throws UnsupportedEncodingException {
        System.out.println(new String(message.getBody(), "UTF-8"));
    }

}

Classe de configuration du producteur de messages

package com.example.rabbitmqa.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.context.annotation.Bean;

@Configuration
public class RabbitMQConfig2 {

//    @Bean
//    RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
//        return new RabbitAdmin(connectionFactory);
//    }

    public static final String EXCHANGE_NAME = "boot_topic_exchange";
    public static final String QUEUE_NAME = "boot_queue";

    //1.交换机
    @Bean("bootExchange")
    public TopicExchange bootExchange(RabbitAdmin rabbitAdmin) {

        TopicExchange exchange = new TopicExchange(EXCHANGE_NAME);
        rabbitAdmin.declareExchange(exchange);
        return exchange;
    }

    //2.Queue 队列
    @Bean("bootQueue")
    public Queue bootQueue(RabbitAdmin rabbitAdmin) {
        Queue queue = new Queue(QUEUE_NAME, true);
        rabbitAdmin.declareQueue(queue);
        return queue;
    }

    //3. 队列和交互机绑定关系 Binding
    /*
        1. 知道哪个队列
        2. 知道哪个交换机
        3. routing key
     */
    @Bean
    public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue,
                                     @Qualifier("bootExchange") Exchange exchange,
                                     RabbitAdmin rabbitAdmin) {
        Binding binding = BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
        rabbitAdmin.declareBinding(binding);
        return binding;
    }


    //创建初始化RabbitAdmin对象
    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        // 只有设置为 true,spring 才会加载 RabbitAdmin 这个类
        rabbitAdmin.setAutoStartup(true);
        return rabbitAdmin;
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/u013833472/article/details/131073942
conseillé
Classement