Я использую akka-camel для подписки на биржу rabbitmq. Будет создано несколько таких актеров... по одному на запрошенный routingKey
. Обмен и очередь не меняются. Каждый раз, когда запрашивается новый routingKey
, я создаю нового актера, и вместо создания нового канала создается совершенно новое соединение, что нежелательно. Я не совсем понимаю, почему новое соединение создается каждый раз, когда создается субъект-потребитель.
Вот код актера:
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))
ОБНОВЛЕНИЕ
Вот именно то, что мне нужно сделать:
Я пишу сервер TCP/IP, который при приеме клиентского соединения должен получать сообщения от других компонентов внутренней архитектуры. Для этого я хотел бы использовать RabbitMQ. После успешного подключения к моему серверу клиент отправит идентификатор, который будет использоваться как часть ключа маршрутизации (например, command.<id>
). Соединение и очередь RabbitMQ создаются, когда подключается первый клиент, а ключ маршрутизации будет примерно таким, как command.first_id
. Когда подключается следующий клиент, я хотел бы добавить ключ маршрутизации command.second_d
в список уже принятых ключей маршрутизации, не создавая нового подключения к RabbitMQ.