Spring座双向通道

azpvetkf  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(241)

有没有可能以类似flatmapsequential的顺序方式从客户机向服务器发送消息?如果我使用flatmap,默认行为似乎只是以一种几乎连续的方式

requester.route("name")
         .data(fluxSendToServer.doOnNext(nr -> log.trace("Send next " + nr.getRequest().getCurrentSequenceValue())))
         .retrieveFlux(ResponseMessageWrapper.class)

并在服务器上记录序列。

8wigbo56

8wigbo561#

谢谢你的回答。如果我把客户端的代码改成

requester.route("name").data(fluxSendToServer.index().map(indexedTuple->{
if(!indexedTuple.getT2().getRequest().getCurrentSequenceValue().equals(indexedTuple.getT1()+1))
{
throw new IllegalStateException("Orderingproblem in client at index "+indexedTuple.getT1());
 };
return indexedTuple.getT2();
 }))

并在接收服务器方法中使用相同的代码

@MessageMapping("name")
   Flux<EncryptedResponseMessageWrapper> handleMessageClientToServer(Flux<EncryptedRequestMessageWrapper> 
         fluxReceivedAtServer){
         return fluxReceivedAtServer.index().map(indexedTuple->  {
if(!indexedTuple.getT2().getRequest().getCurrentSequenceValue().equals(indexedTuple.getT1()+1))
{
 throw new IllegalStateException("Orderingproblem at server at index"+indexedTuple.getT1());
};
return indexedTuple.getT2();
})

对于4000个元素的流量,每次illegalstateexception出现在随机位置,例如路由错误,发送消息,客户端到服务器,索引2175处的服务器排序问题
如果我使用较少的元素,它似乎反复工作。

相关问题