簡體   English   中英

忽略Web服務單向操作的HTTP響應

[英]Ignoring HTTP response for web service one-way operation

我正在開發一個jax-ws Web服務,該服務使用單向操作將消息異步地推送到訂閱的使用者。

不幸的是,每次通知時,服務器都會等待HTTP202響應確認,該確認將線程阻塞一秒鍾。 這正在影響系統的性能,我正在尋找解決方法。

有什么方法可以執行Web服務單向調用並忽略HTTP響應狀態?

好的,因此在花了很多時間之后,我找到了兩種解決方案:

1)使用Apache HTTPComponents,它為AsyncHTTPClient提供了不錯的API,使我們能夠從頭開始構建HTTP響應。

2)更多基於Apache CXF平台(包括HTTPClient實現)的面向Web服務的解決方案-首先,我們需要設置全局Bus屬性:

Bus bus = BusFactory.getDefaultBus();
bus.setProperty(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);

然后,我們使用自定義攔截器將消息交換屬性設置為異步:

final class SkipWaitInterceptor extends AbstractSoapInterceptor {

    SkipWaitInterceptor() {
        super(Phase.SETUP);
    }

    @Override
    public void handleMessage(final SoapMessage message) throws Fault {
        message.getExchange().setSynchronous(false);
    }

}

最后,我們在異步端點上注冊攔截器

org.apache.cxf.endpoint.Client client =
                org.apache.cxf.frontend.ClientProxy.getClient(this.notificationConsumer);
org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();
cxfEndpoint.getOutInterceptors().add(new SkipWaitInterceptor());

僅此而已,單向操作響應不再阻止通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM