我是Akka的新手,我实现了一个侦听设备流量的TCP服务器。我在网上搜索过,找不到任何有关如何使用Akka IO配置TLS的参考或具体示例。
我的用例是我应该能够配置多个端口,并可能指向不同的密钥库
我不确定我是否错过了显而易见的事。
我想我没有清楚地解释自己,所以这里有详细信息
为了向您介绍我正在处理的工作以及我遇到的问题,
我也使用Akka IO开发了我的POC,使用的是Akka v2.3.14和Java 7.
我想要实现的是 - 我应该能够配置有或没有TLS的新服务器端口 - 每个TLS端口都应该能够指向证书的唯一密钥库文件
以下是创建的一些重要演员的路径
TCPProxyService类创建ActorSystem并加载端口配置,然后创建ProxyServiceActor。 ProxyServiceActor绑定到端口(下面的代码)。当ProxyServiceActor收到连接时,它会创建ProxyActor和 ProxyActor实习生创建ProxyListenerActor和ProxySenderActor并使用tcpManager注册ProxyListenerActor(tcpManager = Tcp.get(getSystem()。manger())
TCPProxyService ----> ProxyServiceActor(绑定到给定的服务器端口)----> ProxyActor ----> ProxyListenerActor(已注册的TCP侦听器,侦听客户端端口)----> ProxySenderActor
下面定义的类(ProxyServiceActor)是绑定到它从使用spring beans.xml配置的ProxyConfig实例接收的端口的类
public class ProxyServiceActor extends UntypedActor {
. . . .
@Override
public void preStart() throws Exception {
LOGGER.info("Listening on port = " + proxyConfig.getPort());
tcpManager.tell(TcpMessage.bind(getSelf(), new InetSocketAddress(proxyConfig.getListenIP(), proxyConfig.getPort()), backlog), getSelf());
}
public void onReceive(Object msg) throws Exception {
if (msg instanceof Connected) {
. . . .
ActorRef proxy = getContext().actorOf(Props.create(ProxyActor.class),ActorConstants.PATH_PROXY+counter);
. . . .
proxy.tell(new Object[]{getSender(), msg}, getSelf())
}
}
. . . .
}
对于每个新连接,都会创建一个ProxyActor实例,ProxyActor会创建一个ProxyListenerActor实例并注册ProxyListenerActor以侦听来自 新连接的客户。 (以下示例代码)
public class ProxyActor extends UntypedActor {
. . .
public void onReceive(Object msg) throws Exception {
if (msg instanceof Object[]) {
. . . .
ActorRef proxyListener = getContext().actorOf(Props.create(ProxyListenerActor.class, msg[1]),ActorConstants.PATH_PROXY_LISTENER+device.getCounter());
. . . .
msg[0].tell(TcpMessage.register(proxyListener), getSelf());
. . . .
}
}
. . . .
}
ProxyListenerActor是在端口上侦听来自客户端的消息的类。所有出站通信都使用ProxySenderActor
完成谢谢&此致