背景
实际应用过程中,很多服务通常是独立部署,然后通过各种中间键进行通信。在复杂的使用场景中就有这么一种情况
也就是异步请求获取问题
设计
为了能接收到异步消息,需要引入订阅机制和通知。具体设计方案如下
其中用到的额外组件是redis。redis作为公共组件。使用其消息发布订阅技术作为不同服务之间的沟通。
另外引入消息通知手段,使得同一个服务内部不同线程之间实现消息同步等待与通知
流程步骤
1、客户端发起请求到达服务A
2、服务A异步请求到服务B,同时服务A订阅创建消息接收线程向redis订阅某个主题数据,然后服务A使用某个变量aa同步等待消息。
3、服务B处理完数据之后,推送到redis(使用A订阅的主题)
4、消息接收线程收到订阅的消息,然后将结果数据放到公共变量,使用变量aa通知服务A
5、服务A收到通知后,从公共变量获取数据,返回给客户端
实现
工程结构
代码:https://github.com/zhan107876/waitNotifyRedis
测试
发送:http://localhost:8800/redis-app/test/sendData.do
接收:http://localhost:8800/redis-app/test/getWaitResult.do
日志: