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

简介: 各位大神:现在有一需要如下: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);

}

目录
相关文章
|
7月前
|
存储 数据库
领域模式问题之模型设计存在问题如何解决
领域模式问题之模型设计存在问题如何解决
|
7月前
|
数据库 缓存
发号器优化思路
【7月更文挑战第10天】
49 7
|
7月前
|
SQL 索引
业务系统架构实践问题之想要再SQL代码中生成递增序列,那么步骤问题如何解决
业务系统架构实践问题之想要再SQL代码中生成递增序列,那么步骤问题如何解决
|
7月前
|
缓存 Java
浅析JAVA日志中的性能实践与原理解释问题之AsyncAppender的配置方式的问题是如何解决的
浅析JAVA日志中的性能实践与原理解释问题之AsyncAppender的配置方式的问题是如何解决的
|
8月前
|
存储 C语言 C++
一文搞懂:世界上最神奇的mif文件生成方案
一文搞懂:世界上最神奇的mif文件生成方案
96 0
|
存储 小程序 数据库
小程序整体的思路
小程序整体的思路
223 0
|
Java C++ Python
7-2 然后是几点
7-2 然后是几点
230 0
|
Java
LanguageTool精简的两个思路
LanguageTool精简的两个思路
86 0
|
设计模式 算法 架构师
如何优化你的if-else?来试试“责任树模式”
写业务逻辑时,if-else 可能是最容易想到的逻辑方式了。然而大量堆砌的 if-else 毫无疑问将给代码维护带来巨大的困难。如何优化这些 if-else 呢?本文分享一种设计模式——责任树模式,通过将责任链与策略模式融合,成为一种广义的责任链模式,不仅可以完成任务的逐级委托,也可以在任一级选择不同的下游策略进行处理,并将责任树模式抽象出一个通用的框架。
如何优化你的if-else?来试试“责任树模式”
|
搜索推荐 Python
分享我的的几点思考。
周末就轻松点,分享一些技术之外的思考,如果对你有些启发,那想必是极好的! 吭哧吭哧写公众号也快一年半了,期间有原创分享,也有优质的转载文章。一方面会讲情怀,对广告进行筛选,同时倒也不会违心,筛选后接了些推广挣点生活费和学费。 最近我在思考一个问题,这一年半的时间我最大的收获是什么?是学生时代经济独立吗?是技术水平的提高吗?好像都不是,我更觉得是一些认知观念上的变化,也在接触着一些未曾想过能够接触的人和事。借着周末的机会跟大家分享几点。
179 0

热门文章

最新文章