![](/img/trans.png)
[英]Spring Cloud Stream + RabbitMQ - Consuming existing messages in queue
[英]Consuming from RabbitMQ / MQTT with Spring Cloud Stream
您如何使用 Spring Cloud Stream(即使用 AMQP)消息使用 MQTT 發送到 RabbitMQ? 使用 Rabbit 上的 MQTT,所有消息都放在一個名為“amq.topic”的交換器上。
在消費者方面,使用 Spring Cloud Stream,為每個目的地創建一個隊列,並使用目的地名稱進行“主題”類型的交換; 創建的隊列綁定到交換器。
現在,
我無法手動將隊列綁定到“amq.topic”,因為它是獨占的:
無法獲得對 vhost '/' 中鎖定隊列 '...' 的獨占訪問權限。 它可能最初是在另一個連接上聲明的,或者獨占屬性值與原始聲明的值不匹配。
我不能直接從交換“amq.topic”中收聽,因為,好吧,你必須聽一個隊列......
我創建了一個綁定到傳遞消息的“amq.topic”的“tmp”隊列,但我不能將其用作目標,因為 RMQ 將創建一個名為“tmp.SOME_CLIENT_ID”的新隊列,綁定到一個名為“tmp”的交換,這與我的“tmp”隊列無關。
任何想法都會受到歡迎!
請參閱使用現有隊列/交換。
默認情況下,綁定器將自動提供一個主題交換,其名稱源自目標綁定屬性
<prefix><destination>
的值。 如果未提供,則目標默認為綁定名稱。 綁定消費者時,將自動配置名稱為<prefix><destination>.<group>
的隊列(如果指定了組綁定屬性),或者在沒有組時使用匿名自動刪除隊列。 對於非分區綁定,隊列將使用“match-all”通配符路由鍵 (#) 綁定到交換器,對於分區綁定,則使用<destination>-<instanceIndex>
。 默認情況下,前綴為空字符串。 如果使用 requiredGroups 指定了 output 綁定,則將為每個組提供隊列/綁定。
有許多特定於 rabbit 的綁定屬性允許您修改此默認行為。
如果您希望使用現有的交換/隊列,則可以完全禁用自動配置,假設交換名為 myExchange,隊列名為 myQueue:
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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.