我正在使用akka-camel訂閱rabbitmq交換。將會有幾個這樣的演員創建......每個請求routingKey
。交換和隊列不會改變。每次請求新的routingKey
我創建一個新的演員,而不是創建一個新的頻道,正在創建一個全新的連接,這是不受歡迎的。我不太明白爲什麼每次創建消費者actor時都會創建一個新連接。Akka駱駝RabbitMQ每次創建新連接
這裏的演員代碼:
class CommandConsumer(routingKey: String)
extends Consumer with ActorLogging {
override def endpointUri = s"rabbitmq://localhost/hub_commands?exchangeType=topic&queue=test&autoDelete=false&routingKey=$routingKey"
override def receive: Receive = {
case msg: CamelMessage => {
log.debug(s"received {}", msg.bodyAs[String])
sender ! msg.bodyAs[String]
}
}
}
我創建像這樣的演員:
context.actorOf(CommandConsumer.props("my.routing.key", sender))
UPDATE
這正是我需要完成:
我正在寫一個TCP/IP服務器,當一個客戶端連接被接受,需要接收來自後端架構中其他組件的消息。爲此,我想使用RabbitMQ。成功連接到我的服務器後,客戶端將發送一個ID,該ID將用作路由密鑰的一部分(例如command.<id>
)。 RabbitMQ連接和隊列是在第一個客戶端連接時創建的,並且路由密鑰類似於command.first_id
。當下一個客戶端連接時,我想將command.second_d
路由鍵指向已被接受的路由鍵列表,而不創建與RabbitMQ的新連接。
這聽起來像你建議我爲每個新的路由鍵創建一個新的連接。那是你在說什麼?每次請求新的路由密鑰時,都需要將其添加到已綁定到rabbitmq連接/交換/隊列的路由密鑰列表中。我可以通過簡單地爲已經存在的隊列創建另一個綁定來實現嗎? – threejeez
我剛剛添加到我原來的問題,正是我想要做的。我希望這有助於更好地解決問題。謝謝!! – threejeez