Tengo un productor que produce mensajes en una cola de RabbitMQ mediante un intercambio directo.
nombre de cola: TEMP_QUEUE , nombre de intercambio: TEMP_DIRECT_EXCHANGE
Producir en esta cola es fácil ya que en mi aplicación de productor uso Spring AMQP con el que estoy familiarizado.
En mi aplicación Consumer, necesito usar Spring cloud stream versión 3.0+.
Quiero evitar el uso de anotaciones heredadas como @EnableBinding , @StreamListener porque están a punto de quedar obsoletas.
El código heredado para mi aplicación se vería así:
@EnableBinding(Bindings.class) public class TempConsumer { @StreamListener(target = "TEMP_QUEUE") public void consumeFromTempQueue(MyObject object) { // do stuff with the object } } public interface Bindings { @Input("TEMP_QUEUE") SubscribableChannel myInputBinding(); }De sus documentos he descubierto que puedo hacer algo así
@Bean public Consumer<MyObject> consumeFromTempQueue() { return obj -> { // do stuff with the object }; }No me queda claro cómo especifico que este bean se consumirá de TEMP_QUEUE . Además, ¿qué pasa si quiero consumir de varias colas?
Debe usar application.yml para vincular su bean.
spring.cloud.stream: function.definition: consumeFromTempQueuePuede usar esta configuración para configurar la fuente, el proceso y el sumidero también. En su caso, solo está utilizando una fuente.
Puedes leer este post para más información.
Consulte Consumo de colas/intercambios existentes .
Puede consumir de varias colas con
spring.cloud.stream.bindings.consumeFromTempQueue-in-0.destination=q1,q2,q3 spring.cloud.stream.bindings.consumer.multiplex=trueSin múltiplex obtendrá 3 enlaces; con multiplex, obtendrá 1 contenedor de escucha escuchando múltiples colas.