Camel CXF:Soap 客户端超时

Camel CXF: Soap client timeout

我正在使用 Camel CXF 端点连接到我的 soap 服务器。我想为客户的请求添加超时。为此,我正在使用 continuationTimeout 选项。但它不起作用。没有等到我设置的时间请求就超时了

下面是我的端点配置。

<camel-cxf:cxfEndpoint id="tmAPIWSEndpoint" address="http://IN2NPDCEDB01:8088/webservices/services/TransportationManager"
            wsdlURL="/wsdl/TransportationManager.wsdl"
            endpointName="cis:TransportationManagerPort"
            serviceName="cis:TransportationManagerService"
            xmlns:cis="http://www.i2.com/cis"
            continuationTimeout="60000">
        <camel-cxf:properties>
            <entry key="dataFormat" value="MESSAGE"/>
            <entry key="username" value="XXX"/>
            <entry key="password" value="XXX"/>
        </camel-cxf:properties>
    </camel-cxf:cxfEndpoint>

你的问题不是很清楚,因为没有 camel 路由,所以我看不到你是在 Camel 内部创建 SOAP 服务,还是作为客户端从 Camel 调用 SOAP 服务。根据您发送的少量信息,您似乎正在创建一个客户端。

根据 camel CXF 文档

  • continuationTimeout: 该选项用于设置CXF continuation timeout,默认情况下可以在CxfConsumer中使用 当 CXF 服务器使用 Jetty 或 Servlet 传输时。 (前 Camel 2.14.0,CxfConsumer 只是将持续超时设置为 0,这意味着继续挂起操作永远不会超时。)

请注意,这与 CXF 服务器设置有关,与客户端设置无关。您正在使用此 属性,但我认为这不是您要找的。

如果您参考 Apache CXF Client Settings Documentation 页面,您会在那里找到以下注释:

  • ConnectionTimeout: 指定客户端将在它之前尝试建立连接的时间量(以毫秒为单位) 超时。默认值为 30000(30 秒)。 0 指定 客户端将无限期地继续尝试打开连接。
  • ReceiveTimeout: 指定客户端在超时之前等待响应的时间量(以毫秒为单位)。这 默认为 60000。0 指定客户端将无限期等待。

如果您访问 CXF 文档页面,那里有很多示例。

以下是编程方式:

HelloWorld hello = (HelloWorld) context.getBean("helloService");
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(hello);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(5000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(5000);
httpConduit.setClient(httpClientPolicy);
System.out.println(hello.getHelloWorldAsString("Everyone"));

(我用的是弹簧)

<bean id="helloService"
    class="soap.timeout.demo.client.jaxws.HelloWorld"
    factory-bean="helloServiceFactory" factory-method="create"/>
<bean id="helloServiceFactory"
    class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="soap.timeout.demo.client.jaxws.HelloWorld"/>
    <property name="address" value="http://localhost:9999/ws/hello"/>
</bean>