簡體   English   中英

從 RabbitMQ / MQTT 使用 Spring 雲 Stream

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM