使用netty实现的tcp通讯中如何实现同步返回

在netty实现的tcp通讯中,一切都是异步操作,这提高了系统性能,但是,有时候client需要同步等待消息返回,如何实现呢?笔者已经实现,在此总结下重点要素

实现要点:

1、消息结构设计

     消息头中需要有id和correspondId,即消息id和响应id,使用UUID实现。message发出去的时候需设置id,服务器接收到message处理业务,响应消息中的correspondId设置成原消息的id;

2、采用CountDownLatch实现线程同步等待;

流程示意图:

1、业务系统调用统一api发送消息;

2、消息发送服务将消息缓存到消息管理器,缓存键值为id;

3、消息发送服务将消息发送到服务器,同时线程进入休眠等待,还可以设置timeout;

4、服务器处理消息后,将响应消息写到tcp流;

5、消息接收服务接收到消息后,判断消息correspondId是否有值,如果有值,则说明有一个线程在等待该消息返回,根据correspondId找到该线程唤醒运行,此刻服务调用即得到返回值;

6、correspondId为空的话,则将消息给业务系统处理。

原文地址:https://www.cnblogs.com/mysqlcluster/p/5315494.html