使用Spring云流从RabbitMQ/MQTT消费

使用Spring云流从RabbitMQ/MQTT消费,rabbitmq,amqp,spring-cloud-stream,Rabbitmq,Amqp,Spring Cloud Stream,如何使用随MQTT发送到RabbitMQ的SpringCloudStream(即使用AMQP)消息进行消费? 在Rabbit上使用MQTT时,所有消息都会到达一个名为“amq.topic”的交换上 在消费者端,使用Spring Cloud Stream,为每个目的地创建一个队列,并使用目的地的名称交换类型“topic”;创建的队列已绑定到exchange 现在, 我无法手动将队列绑定到“amq.topic”,因为它是独占的: 无法以独占方式访问vhost“/”中的锁定队列“…”。它可能最初在另

如何使用随MQTT发送到RabbitMQ的SpringCloudStream(即使用AMQP)消息进行消费? 在Rabbit上使用MQTT时,所有消息都会到达一个名为“amq.topic”的交换上

在消费者端,使用Spring Cloud Stream,为每个目的地创建一个队列,并使用目的地的名称交换类型“topic”;创建的队列已绑定到exchange

现在,

  • 我无法手动将队列绑定到“amq.topic”,因为它是独占的:

    无法以独占方式访问vhost“/”中的锁定队列“…”。它可能最初在另一个连接上声明,或者独占属性值与原始声明的值不匹配

  • 我无法直接从exchange“amq.topic”收听,因为您必须收听队列

  • 我创建了一个绑定到消息传递的“amq.topic”的“tmp”队列,但我不能将其用作目的地,因为RMQ将创建一个名为“tmp.SOME_CLIENT_ID”的新队列,该队列绑定到一个名为“tmp”的交换,它与我的“tmp”队列无关

任何想法都欢迎

默认情况下,活页夹将自动提供一个主题交换,其名称从目标绑定属性的值派生而来。如果未提供,则目标默认为绑定名称。绑定使用者时,队列将自动设置为名称
(如果指定了组绑定属性),或者在没有组时设置为匿名、自动删除队列。对于非分区绑定,队列将使用“全部匹配”通配符路由键(#)绑定到exchange,对于分区绑定,队列将使用
-
绑定到exchange。默认情况下,前缀为空字符串。如果使用requiredGroups指定了输出绑定,则将为每个组提供队列/绑定

有许多特定于兔子的绑定属性允许您修改此默认行为

如果您有一个要使用的现有exchange/队列,则可以按如下方式完全禁用自动资源调配,假定该exchange名为myExchange,队列名为myQueue:

spring.cloud.stream.bindings..destination=myExhange
spring.cloud.stream.bindings..group=myQueue
spring.cloud.stream.rabbit.bindings..consumer.bindQueue=false
spring.cloud.stream.rabbit.bindings..consumer.declareeexchange=false
spring.cloud.stream.rabbit.bindings..consumer.queueNameGroupOnly=true
如果希望绑定器提供队列/交换,但希望使用此处讨论的默认值以外的其他方法,请使用以下属性。有关更多信息,请参阅上述物业文档

spring.cloud.stream.rabbit.bindings..consumer.bindingRoutingKey=myRoutingKey
spring.cloud.stream.rabbit.bindings..consumer.exchangeType=
spring.cloud.stream.rabbit.bindings..producer.routingKeyExpression='myRoutingKey'
spring.cloud.stream.bindings.<binding name>.destination=myExhange

spring.cloud.stream.bindings.<binding name>.group=myQueue

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.bindQueue=false

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.declareExchange=false

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.queueNameGroupOnly=true
spring.cloud.stream.rabbit.bindings.<binding name>.consumer.bindingRoutingKey=myRoutingKey

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.exchangeType=<type>

spring.cloud.stream.rabbit.bindings.<binding name>.producer.routingKeyExpression='myRoutingKey'