【问题标题】:Parallel invoking list<Futures> async webservice client并行调用 list<Futures> 异步 Web 服务客户端
【发布时间】:2021-01-30 22:41:59
【问题描述】:

我有一个 web 服务客户端,它在不同的端点上调用多个具有相同 wsdl 的 web 服务,所以我决定以并行方式进行异步调用。 我生成了 wsimport async jax-ws 客户端,我决定使用带有异步回调的 Future 调用(对所有期货操作使用 single AsyncHandler 实例),

问题是:handleResponse(Response response) 方法中是否有办法知道响应被引用到期货列表中的哪个未来?任何可以在请求上下文中完成并传播到响应上下文的事情? 我是否真的应该在 AsyncHandler 中保留一个状态并为每个未来的操作设置一个新的 Handler 并将响应存储在一个共享列表中(可能是一个线程安全的类成员)?

有没有办法像这里一样将请求上下文传播到响应? [https://docs.oracle.com/middleware/1213/wls/WSGET/jax-ws-async-roadmap.htm#BABFAFHD][1]

谢谢大家。我的sn-p:

        WsSoapClient ws = new ....;

        List<Future> futures = new ArrayList<>();

        for (String url : urlList) {

            
            
        
            BindingProvider bp = (BindingProvider) ws;
            bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
            

            Future invokeAsync = ws.getAsync("foo", mh);
            
            futures.add(invokeAsync);
            
        }
        
        futures.stream().parallel().forEach((t) -> {
            try {

                t.get(15L, TimeUnit.SECONDS);
            } catch (InterruptedException | ExecutionException | TimeoutException ex) {
                
            }
        });
        



class MessageHandler implements AsyncHandler<String> {

        private final List<String> responses;

        public MessageHandler() {
            List<String> rr = new ArrayList<>();
            responses = Collections.synchronizedList(rr);
        }

        @Override
        public void handleResponse(Response<String> response) {
            try {

                String get = response.get();
                responses.add(get);
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public List<String> getResponses() {
            return responses;
        }

    }
        
            


  [1]: https://docs.oracle.com/middleware/1213/wls/WSGET/jax-ws-async-roadmap.htm#BABFAFHD

【问题讨论】:

    标签: java web-services asynchronous jax-ws future


    【解决方案1】:

    我最终实现了一个维护状态的自定义回调处理程序。每个未来都有一个不同的实例。

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2012-10-03
      • 2014-09-04
      • 2012-04-15
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      相关资源
      最近更新 更多