就是A调用一个系统的工作流,系统工作流做完反馈B,这是一个异步的过程。现在想做成同步的,就是A启动工作流之后停止,一直等待B被回调了,设定超时时间,如果超时A返回错误;否则返回成功。
B每次收到请求就往里面加数据
A如果非超时处理完请求就会把数据删掉
A这边设置一个集合
只有集合里有工单ID了才返回结果,并且把这个ID从集合中REMOVE调
B一来A就ADD一个
public class AClient2C2 { private final long timeout = 10000; public void test(String taskId) { long count = 0; while (BService2C2.getInstance().isHasTask(taskId) && count < timeout) { try { System.out.println("wait+"+count); Thread.sleep(1000); count += 1000; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(count>=timeout) { System.out.println("超时"); } } public static void main(String[] args){ BService2C2.getInstance().regesitTaskId("aaaa"); AClient2C2 ac = new AClient2C2(); ac.test("aaaa"); BService2C2.getInstance().removeTaskId("aaaa"); } }
import java.util.HashMap; import java.util.Map; public class BService2C2 { private static BService2C2 instance; private static Map<String,String> map = new HashMap<String,String>(); private BService2C2() { } public static BService2C2 getInstance(){ if(instance==null){ instance = new BService2C2(); } return instance; } public void regesitTaskId(String taskId){ map.put(taskId, taskId); } public void removeTaskId(String taskId){ map.remove(taskId); } public boolean isHasTask(String taskId){ if(null!=map.get(taskId)){ return Boolean.TRUE; } return Boolean.FALSE; } }
时间: 2024-09-20 08:12:33