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

各位大神:

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

}

上一篇:068.结构体-结构体中const使用场景


下一篇:Java 并发/多线程教程(十二)-JAVA同步块