java – 有状态的Rsocket应用程序
作者:互联网
在我的项目中,我希望有多个客户端连接到服务.我正在使用java Rsocket实现.
该服务应该为每个客户保持一个状态.现在,我可以通过一些标识符来管理客户端.这个选项我已经实现了.但我不想使用字符串手动管理会话.
所以另一个想法是通过Rsocket连接识别客户端.有没有办法使用Rsocket通道识别特定客户端?
想象一下示例服务和几个客户端.每个客户端都有Rsocket通道,服务已启动并正在运行.有没有办法使用Rsocket通道在服务器端识别这些客户端?如果您能够展示这种行为的程序化示例,那将是惊人的.
谢谢!
编辑(描述案例更详细)
这是我的例子.
我们目前有三个CORBA对象,如图所示:
> LoginObject(通过NamingService向其检索引用).客户端可以调用login()方法来获取会话
> Session对象具有各种方法,用于查询有关当前服务上下文的详细信息,并且最重要的是获取Transaction对象
> Transaction对象可用于通过将commandName和键值对列表作为参数的通用方法执行各种命令.
在客户端执行n个命令后,他可以提交或回滚事务(也可以通过Transaction对象上的方法).
所以我们在这里使用会话对象来执行我们服务上的事务.
现在我们决定从CORBA转移到Rsocket.因此,我们需要Rsocket微服务能够存储会话的状态,否则我们无法知道将要提交或回滚的内容.这可以通过每个客户的单个发布者来完成吗?
解决方法:
这是我前几天创建的一个例子,它将使用Netifi的经纪人创建一个有状态的RSocket:
https://github.com/netifi/netifi-stateful-socket
不幸的是,您需要在本地构建我们的开发分支以试用它(https://github.com/netifi/netifi-java) – 如果您不想在本地构建它,那么应该在本周末发布代码.
我也正在研究一个纯RSocket示例,但是如果你想看看如何看一下示例中的StatefulSocket.它应该为您提供如何使用纯RSocket处理会话的线索.
关于您关于事务管理器的其他问题 – 您需要将事务绑定到正在发出的Reactive Streams信号 – 如果您收到取消,您将回滚onError,如果收到onComplete,您将提交事务. Flux / Mono有一些副作用方法,可以很容易地解决这个问题.根据您正在做的事情,您也可以使用BaseSubscriber,因为它有钩子来处理不同的Reactive Streams信号.
谢谢,
罗伯特
标签:java,reactive-programming,rsocket 来源: https://codeday.me/bug/20190827/1744636.html