求助:以下场景用什么模式或是思路好

简介: 各位大神:现在有一需要如下:A项目中的service层要调用B项目的一个方法,这个调用是利用Activemq的消息传递的,B项目处理完成后,将消息回复到A项目中activemq消息监听QUEUE上,而A项目的service层要将B处理的结果同步返回给调用者,小弟我采用了两种...

各位大神:

现在有一需要如下:A项目中的service层要调用B项目的一个方法,这个调用是利用Activemq的消息传递的,B项目处理完成后,将消息回复到A项目中activemq消息监听QUEUE上,而A项目的service层要将B处理的结果同步返回给调用者,

小弟我采用了两种方式,总感觉处理的不太舒服,求指导

第一种:采用加锁机制 ReentrantLock

第二种:采用了Spring 的DeferredResult,deferredResult在没有超时的的情况下,一直循环去断定是否被设置了值

DeferredResult deferredResult =newDeferredResult(5000L);

TaskDetail taskDetail =newTaskDetail("/login",deferredResult);

Task.addTask(correlationID,taskDetail);

deferredResult.onTimeout(newAsyncRequestTimeHandler(correlationID,taskDetail));

boolean  hasReturn =false;

while(!hasReturn) {

         hasReturn = deferredResult.hasResult();

}

JSONObject result = (JSONObject) deferredResult.getResult();

在Listener处做了如下处理:

if(Task.TASK_MAP.containsKey(correlationID)) {

         longendTime = System.currentTimeMillis();

         TaskDetail taskDetail = Task.TASK_MAP.get(correlationID);

         longstartTime = taskDetail.getStartTime();

         DeferredResult deferredResult = taskDetail.getResult();

         deferredResult.setResult(json);

         logger.info("correlationID:[{}] request normal,in {} ms.",correlationID,+(endTime - startTime));

        Task.TASK_MAP.remove(correlationID);

}

目录
相关文章
|
3月前
|
数据库 缓存
发号器优化思路
【7月更文挑战第10天】
33 7
|
存储 小程序 数据库
小程序整体的思路
小程序整体的思路
192 0
|
5月前
|
算法 测试技术 C#
【动态规划】LeetCode2552:优化了6版的1324模式
【动态规划】LeetCode2552:优化了6版的1324模式
|
机器学习/深度学习 人工智能 算法
Barrels (codeforces 1430B )(拆分思想和模拟控制)
Barrels (codeforces 1430B )(拆分思想和模拟控制)
49 0
|
算法 Java API
逆向的流程和思路
逆向的流程和思路
|
算法 C++
详细实例说明+典型案例实现 对枚举法进行全面分析 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
199 0
详细实例说明+典型案例实现 对枚举法进行全面分析 | C++
|
算法 C++
详细实例说明+典型案例实现 对迭代法进行全面分析 | C++
上面我们对迭代算法进行了细致的举例和经典代码的讲解。使用该算法时,要注意体会我们所要求的东西它在程序代码中的更新迭代过程,理解核心思想从而去更好的运用这种常用的经典算法解决常规问题。
417 0
详细实例说明+典型案例实现 对迭代法进行全面分析 | C++
|
JSON 分布式计算 数据处理
IP 转换_思路梳理 | 学习笔记
快速学习 IP 转换_思路梳理
103 0
IP 转换_思路梳理 | 学习笔记
|
Java
LanguageTool精简的两个思路
LanguageTool精简的两个思路
65 0
|
缓存 数据库
秒杀解决方案思路和步骤
秒杀解决方案思路和步骤
160 0
秒杀解决方案思路和步骤