首先使用这个是为了MQTT发布的时候同步订阅响应的主题返回相应的信息,mqtt不能同步返回消息就是麻烦。方案就是:
1. MQTT发布topic
2. 每隔0.1秒进行轮询,查询redis缓存的数据
3. MQTT订阅后把返回信息放在redis缓存
4. 查询redis缓存有数据,退出轮询
String devNum ="dev001"; ScheduledExecutorService service = Executors.newScheduledThreadPool(8); final Map<String, Future> futures = new HashMap<>(); // 每隔0.1秒进行轮询 final ScheduledFuture<?> future = service.scheduleWithFixedDelay(new Runnable() { @Override public void run() { String task = redisCache.getString(taskId); if (task != null && task.length() != 0) { Future future = futures.get(devNum); if (future != null) { futures.remove(devNum); future.cancel(true); service.shutdown(); } } } }, 0, 100, TimeUnit.MILLISECONDS); try { futures.put(devNum, future); // 设置超时时间 future.get(4, TimeUnit.SECONDS); } catch (InterruptedException e2) { e2.printStackTrace(); log.error(e2.getMessage()); } catch (CancellationException e2) { log.info(e2.getMessage()); } catch (ExecutionException e2) { e2.printStackTrace(); log.error(e2.getMessage()); } catch (TimeoutException e2) { log.info(e2.getMessage()); } finally { future.cancel(true); service.shutdownNow(); }
新手 , 有什么好建议吗