springBoot integra el modo de tema rabbitMQ

Hola a todos. Recientemente, cuando estaba aprendiendo rabbitMQ, descubrí que el modo de tema era bastante interesante. Publícalo y comparte el proceso de aprendizaje contigo. Espero aprender, comunicarnos y crecer juntos.
Primero, escribe pom.xml a maven de mq.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

Luego está el archivo de configuración

server.port=8082
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672 #注意这里是5672 并不是15672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

La siguiente es la clase de configuración más importante de mq

package com.rabbitmq.util;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;



/**
 * @author 陈龙龙
 * @title: rabbitMqUtil
 * @projectName rabbit_demo
 * @description: TODO
 * @date 2019/5/2215:48
 */
@Configuration
public class rabbitMqUtil {
    @Bean(name = "okong")
    public Queue queue() {
        //创建一个消息队列
        return new Queue("topic.okong");
    }
    @Bean(name = "qune")
    public Queue qune() {
        //创建一个消息队列
        return new Queue("topic.qune");
    }
    @Bean
    TopicExchange topicExchange() {
        return new TopicExchange("topic");//配置路由器为Topic模式
    }

    @Bean
    Binding bindingExchangeA(@Qualifier("okong") Queue queue, TopicExchange topicExchange) {
        // 配置该消息队列的  routingKey 
        //topic.* 匹配 第一个.后面的单词    代表      一个    单词
        //比如 topic.asd 会被该消息队列接受 topic.asd.dsf不会被该消息队列接受
        return BindingBuilder.bind(queue).to(topicExchange).with("topic.*");
    }

    @Bean
    Binding bindingExchangeB(@Qualifier("qune") Queue qune, TopicExchange topicExchange) {
        // 配置该消息队列的  routingKey 
        //topic.# 匹配 所有.后面的单词     代表     任意    个      单词
        //比如 topic.asd 会被该消息队列接受 topic.asd.dsf也会被该消息队列接受
          return BindingBuilder.bind(qune).to(topicExchange).with("topic.#");
    }
}

Una vez completada la configuración, escriba una clase de escucha que sea un consumidor

package com.rabbitmq.util;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author 陈龙龙
 * @title: ListenterQune
 * @projectName rabbit_demo
 * @description: TODO
 * @date 2019/5/2216:36
 */

@Component
public class ListenterQune {
    @RabbitListener(queues = "topic.qune")
    @RabbitHandler
    public void process(String mess){
        System.out.println("我是topic.qune的消费者接收到的消息为 :"+mess);
    }
    @RabbitListener(queues = "topic.okong")
    @RabbitHandler
    public void okong(String mess){
        System.out.println("我是topic.okong的消费者接收到的消息为:"+mess);
    }
}

A continuación, escribo un productor que es un remitente de mensajes.

@RequestMapping("sendTwo")
public void sendTwo(String mes){
    amqpTemplate.convertAndSend("topic","topic.name",mes);
    amqpTemplate.convertAndSend("topic","topic.a",mes);
    
}

Envía de esta manera, se pueden recibir ambas colas,
Ambas colas recibieron el mensaje
y luego vamos cambiando el productor para ver el efecto

@RequestMapping("sendTwo")
public void sendTwo(String mes){
    amqpTemplate.convertAndSend("topic","topic.name.asda",mes);
    amqpTemplate.convertAndSend("topic","topic.a",mes);

}


De esta forma, la cola de mensajes de topic.qune recibe dos mensajes

El topic.okong acaba de recibir un mensaje
tal razón es que la configuración de interruptor de routingKey no es el mismo
de unión topic.qune configuración de cola de mensajes routingKey es el tema. # Significa el comienzo de toda una tema será igualado a la cola de mensajes,
la routingKey configurada para el tema enlazado. La cola de mensajes okong es tema. Solo coincidirá con la palabra tras el tema. Si hay dos o más, no coincidirá con la cola de mensajes.
Por supuesto, también podemos establecer directamente la
clave de enrutamiento * Establecer como topic.asd y así sucesivamente, pero en este caso, básicamente no es diferente del Direct ordinario.
Espero poder ayudarlo.

Supongo que te gusta

Origin blog.csdn.net/ChenLong_0317/article/details/90720421
Recomendado
Clasificación