我在Play应用程序中有一个WebSocket服务器,我想将它移动到akka-http服务 . 我目前正在使用 ActorFlow.actorRef
,这是Play中不存在的一部分 .
当WebSocket被接受时,我订阅了RabbitMQ队列,并将每条消息转发给WebSocket . 当我收到来自WebSocket的消息时,我会在本地处理一些消息并将其他人转发到RabbitMQ交换机 .
我如何使用akka-http做同样的事情?我可以使用 Sink.actorRef
创建一个接收器并在那里处理入站消息,但是源代码呢?
我可以创建一个带有 Source.actorRef
的源代码,但是如何访问该actor以在其实现时发送消息?我应该使用不同类型的源来从我的RabbitMQ订阅的 foreach
发送消息吗?
一旦我有了这些,看起来我可以使用 Flow.fromSinkAndSource
返回所需的流程 .
1 回答
我会解释你的要求
你有一个需要的websocket终点
在本地处理一些请求并将响应发送回客户端
将一些请求转发给RabbitMQ
订阅rabbitMQ,并将来自rabbitMQ的消息转发给websocket客户端 .
我的建议是,除非必要,避免演员,演员是强大的,但我发现流更容易阅读和理由何时它适合模型
下面是如何在没有actor的情况下将Source和Sink一起管道
这个片段没有实现你展示的任何要点,希望它能解决你的问题