En el tutorial anterior creamos un interruptor de basura. Podemos entregar el mensaje a múltiples consumidores en forma de transmisión.
¿Qué hacer? Enrutamiento
En este tutorial, agregue una nueva característica donde podamos suscribirnos a solo parte del mensaje. Por ejemplo, solo los colores que nos interesan ("naranja", "negro", "verde") estarán conectados y todos los mensajes se imprimirán en la consola.
Unir
Un interruptor y una cola son una relación vinculante. Una comprensión simple es que la cola está interesada en la información de este intercambio.
La unión se puede agregar con una tecla de enrutamiento de parámetros adicional. Spring-AMQP utiliza una API simple y fácil de entender (modo de constructor) para que la relación entre ellos sea muy clara. Poner el interruptor y la cola en BindingBuilder y vincular la cola al interruptor fácilmente con la tecla de enrutamiento (RoutingKey).
@BeanPublic Binding Binding0A (DirectExchange DirectExchange, Queue AutodeLetequeue0) {return bindingBuilder.bind (autodeLetequeue0) .to (directExchange) .with ("naranja");}Esto significa que la tecla de enlace depende del tipo de interruptor, y el interruptor de basura no puede hacerlo sin opciones que puedan estar vinculadas.
Interruptor de conexión directo
En el tutorial anterior, nuestro sistema de mensajería fue entregado a todos los consumidores en forma de transmisión. Queremos ampliar las funciones para incluir filtros basados en tipos de color. Por ejemplo, queremos que un programa reciba mensajes de error detallados y los escriba en el disco duro como un registro, sin recibir información o registros de advertencia.
Tres claves de enrutamiento: naranja, negro y verde
Como se muestra en la figura anterior, hay 2 colas unidas al intercambio de conexión directa x. La primera cola usa las teclas de enrutamiento es naranja, y la segunda tiene 2 teclas de enrutamiento, negras y verdes.
En esta configuración, cuando un mensaje que usa la tecla de enrutamiento se presiona al conmutador, el mensaje se enrutará a la cola Q1. Cuando la clave de enrutamiento utilizada por el mensaje es negro o verde, se enrutará a Q2. Se descartarán los mensajes restantes que no usan la clave de enrutamiento.
Encuadernación paralela
Encuadernación paralela
Esto puede implementar funciones similares a los interruptores de basura.
Casi, mira el código
Config.java
paquete com.zb.rabbitmqtest.t4routing.config; import org.springframework.amqp.core.*; importar org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration;/***@author zhang bo*/ @ @configuration (valore (value = "T4Config") Public Class Config {/*** creado por: Zhang Bo* Tiempo: 2018/3/5 10:45 AM* @Apinote Define el intercambio conectado directo*/@Bean public DirectExchange DirectExchange () {return New DirectExchange ("Direct-Exchange"); }/*** Creador: Zhang Bo* Tiempo: 2018/3/5 10:48 AM* @apinote Definición para eliminar automáticamente la cola anónima*/@Bean Public Queue Autodeletequeue0 () {return New AnonyMoqueue (); }/*** Creador: Zhang Bo* Tiempo: 2018/3/5 10:48 AM* @apinote Definición para eliminar automáticamente la cola anónima*/@Bean Public Queue Autodeletequeue1 () {return New AnonyMoqueue (); }/*** Creado por: Zhang Bo* Tiempo: 2018/3/5 10:48 AM* @param DirectExchange Switch conectado directamente* @param autodeLetequeue0 Eliminar automáticamente la cola* @apinote enlace utilizando la clave de enrutamiento de la clave de la clave de enrutamiento a la cola de la clave de la clave de enrutamiento. autodeletequeue0) {return bindingBuilder.bind (autodeletequeue0) .to (directExchange) .with ("naranja"); }/*** Creado por: Zhang Bo* Tiempo: 3/3/3/5 10:48 am* @param directExchange directExchange* @param autodeLetequeue0 Eliminar automáticamente la cola* @apinote enlace usando la clave de enrutamiento en la cola de la clave de la tecla Direct* @return*/@Bean public Binking 0B (DirectExchange DirectExchange, Queue AutodeDELEDELEE BindingBuilder.bind (autodeletequeue0) .to (directExchange) .with ("negro"); }/*** Creado por: Zhang Bo* Tiempo: 2018/3/5 10:48 AM* @param DirectExchange DirectExchange* @param AutodeLetequeue1 Eliminar automáticamente la cola* @Apinote Binking utilizando la cola AutodeLetequeue1 con la tecla de enrutamiento Black a la interruptura directa* @return Binking*/@Bean Public Binking Binding1A (Cambio de DirectExchange DirectEx. autodeletequeue1) {return bindingBuilder.bind (autodeletequeue1) .to (directExchange) .with ("negro"); }/*** Creado por: Zhang Bo* Tiempo: 3/3/3/5 10:48 am* @param directExchange directExchange* @param autodeLetequeue1 Eliminar automáticamente la cola* @apinote enlace usando la clave de enrutamiento verde a la cola verde direct BindingBuilder.bind (autodeletequeue1) .to (directExchange) .with ("verde"); }} Receptor.java
paquete com.zb.rabbitmqtest.t4routing.receiver; import org.springframework.amqp.rabbit.annotation.rabbitListener; import org.springframework.stereotype.component;/*** @author zhang bo*/ @componente (valor = "t4Receiver") @RabBitListener (queues = "#{autodeLetequeue0.name}") public void receper0 (string str) {system.out.println ("receper0 ++++++++++++:"+str); } @RabBitListener (queues = "#{autodeLetequeue1.name}") public void receper1 (String str) {system.out.println ("receper1 ++++++++++++:"+str); }} Send.java
paquete com.zb.rabbitmqtest.t4routing.send; import org.springframework.amqp.core.directexchange; import org.springframework.amqp.rabbit.core.rabbittemplate; import og.springframework.beans.annotation.autowired; import org. @Autowired privado rabbittemplate rabbittemplate; cadena privada [] keys = {"naranja", "negro", "verde"}; public void send () {String Message = "JAHAHA"; for (int i = 0; i <5; i ++) {System.out.println ("Enviar ++++++++++++++:". Concat (mensaje)); rabbittemplate.convertandsend (directExchange.getName (), claves [2], mensaje); }}} SendTest.java
paquete com.zb.rabbitmqtest.t4routing.send; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.aUtowired; import og.sspingframework.boot.test.context.springboott; import org.springframework.test.context.junit4.springrunner;/*** @author zhang bo*/ @runwith(springrunner.class)@springboottestpublic class sendTest {@aUtowired private envío; @Test public void send () lanza excepción {send.send (); }} Resultados de la prueba: si son claves [0], entonces solo hay receptor0. Si es claves [1], es similar a la transmisión, con Recibe0 y Recibe1. Si es claves [2], entonces solo hay recibo1.
Cuando las teclas [0]
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajajaCuando las teclas [1]
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN0 +++++++++++++++++: jajajajaCuando las teclas [2]
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
Enviar +++++++++++++++++: jajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
RECIN1 +++++++++++++++++: jajajaja
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.