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

各位大神:

现在有一需要如下: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);

}

时间: 2024-10-31 13:36:02

求助:以下场景用什么模式或是思路好的相关文章

技术-求助:提供一个入侵阿里的思路

问题描述 求助:提供一个入侵阿里的思路 谁能提供一个入侵阿里的思路.当然,不是真的去做,只是想知了解学习这个思路本身涉及 到的知识和技术. 解决方案 要给你的思路就是"水无常形兵无常态",作为阿里这样面向全球的服务器,能对他发起攻击取得成功的人必然非常少.如果这种技术公开到可以在一个免费和公开的论坛中随便讨论的话,那么阿里早歇菜了. 解决方案二: 就算有,也仅仅只是涉及小范围的漏洞,不久就会被发现并且补上

银行转账业务场景的几种实现思路对比

前言 ps: 由于本篇文章是我早期所写,文中的思想已经和我现在的想法完全不同了.目前我所理解的领域模型,是被调用的,应用层使用领域模型,调用领域模型中的各种构造块完成用例场景.另外,关于银行转账,我们还可以使用另一种更好的实现方案,即最终一致性的方案,通过事件驱动的流程的方式来实现转账.具体实现见ENode框架中的BankTransferSample中的代码实现:https://github.com/tangxuehua/enode 这篇文章希望通过一个银行转账的例子来和大家分享一些我最近想到的

求助!vb.net的Web模式中DataSet怎样转换成XML

问题描述 VB.net中Web模式的DataSet数据怎么导出XML文件呢?Form模式的代码到Web模式怎么就不行了呢?C#中Web模式的代码也是不行,可以建立文件,只有表头的几行说明,但没有架构和数据.求助高手指点!VB:在Form模式中没有问题,改为Web模式不行了TryDimmyXmlFileAsString="d:dsPrint.xml"'将DataSet的结构描述与资料写出至一个档案中ds.WriteXml(myXmlFile,XmlWriteMode.WriteSchem

求助好的数据结构存储模式算法来“极速”展开14场胜负彩全复式源码和集合运算!!!

问题描述 500元现金求助"极速"展开14场胜负彩全复式源码和集合运算源码!!!源代码可采用C#/DELPHI7/DELPHI.NET编写要提供可以运行的源码!!!如果使用到第三方插件或控件也要在源程序中给出,如果不能正确生成程序则不算!!对于牛人来说,写"极速"展开14场胜负彩全复式源码和集合运算源码是举手之劳的事情,我只需要简单实现,点击按钮1后,要求"极速"展开14场胜负彩全复式,在某个显示界面中可以看到分页显示的单式,点击按钮2可以将读入

求助:配置Hadoop单机模式格式化HDFS时出错,提示找不到SecurityAuth.audit

问题描述 >>错误:java.io.FileNotFoundException:/hadoop/SecurityAuth.audit(Nosuchfileordirectory)>>截图:>>希望论坛上的朋友们提供帮忙,给出问题的解决方法,谢谢(o'w'o) 解决方案 解决方案二:报错是说找不到文件和目录,这种问题你首先看看路径对不对,然后在看看文件夹是否有相应的读,写权限解决方案三:权限问题吧.解决方案四:删除日志下的所有的东西再来format一下.一般都是权限问题.

求助:vs2008里调试模式下的全部分离功能

问题描述 刚才调试的时候一不小心点了全部分离对程序会有什么影响吗 解决方案 解决方案二:没有影响.最多是再开一次,再附加一次.解决方案三:全部分离就是让程序自己玩了不调试了,关掉程序就行.解决方案四:多试几次呗,源码还在怕啥

达达平台的物流场景

业务场景 达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题. 达达业务主要包含两部分:商家发单,配送员接单配送,如下图所示. 达达的业务规模增长极大,在1年左右的时间从零增长到每天近百万单,给后端带来极大的访问压力.压力主要分为两类:读压力.写压力.读压力来源于配送员在APP中抢单,高频刷新查询周围的订单,每天访问量几亿次,高峰期QPS高达数千次/秒.写压力来源于商家发单.达达接单.取货.完成等

pipeline-filter模式变体之尾循环

注:这篇文章的设计存在一些问题,或者说不够优雅.关于原因,请移步本人另一篇文章:<再谈pipeline-filter模式> pipeline-filter作为一种处理数据的模式(见[POSA]卷4)可以将应用的任务划分为几个自我完备的数据处理步骤,并连接到一个数据管道.本文介绍一种不太常见的pipeline-filter的变体--尾循环的pipeline-filter,当然这也是在特定的需求场景下才会出现的. 首先,我们来看一个常见的pipeline-filter的模式图: 模式的思路比较简单

策略模式的孪生兄弟——对状态模式的深度复习总结

俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及的总结知识点如下: 和策略模式的比较 状态模式概念和例子 应用场景 责任链模式和状态模式对比 一种代码优化的思路 java.util.Iterator里也有状态模式的影子 状态模式的优缺点 有限状态机及其应用 前面有总结--策略模式,之前早就觉得策略和状态设计模式有一些相似-- 接口的常用用法都有什么?策略设计模式复习总结 我知道策略模式是对象的行为模式,其实就是对一系列级别平等的算法的封装,它不关心算法实现,让客户端去动态的