我正在使用 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。成功连接到我的服务器后,客户端将发送一个 ID,该 ID 将用作路由键的一部分(例如command.<id>
)。RabbitMQ 连接和队列是在第一个客户端连接时创建的,并且路由键类似于command.first_id
. 当下一个客户端连接时,我想将 command.second_d
路由键添加到已接受的路由键列表中,而不创建与 RabbitMQ 的新连接。