【问题标题】:Getting java.net.SocketException: Connection reset, during making http4 call in Apache camel route获取 java.net.SocketException:连接重置,在 Apache 骆驼路由中进行 http4 调用期间
【发布时间】:2018-11-28 14:27:29
【问题描述】:

我正在从目标服务器获得以下异常。我正在将骆驼 http 组件迁移到 http4 组件。

2018-11-27 01:17:34,156 | ERROR | ernal.req.queue] | DefaultErrorHandler              | 81 - org.apache.camel.camel-core - 2.16.3 | Failed delivery for (MessageId: ID:ip-172-16-11-197-60068-1543219848548-41:1:1:1:1 on ExchangeId: ID-ip-172-16-11-197-36927-1543219848013-31-14). Exhausted after delivery attempt: 1 caught: java.net.SocketException: Connection reset

HTTP4 请求标头(不工作流) -

POST /GenieWebService/documentgenerator.asmx HTTP/1.1  
Connection: Keep-Alive  
Content-Length: 28955  
Content-Type: text/xml; charset=utf-8  
Accept-Encoding: gzip,deflate  
Authorization: Basic ZXNidXNlcjpwYXNzd29yZA==  
Host: xmz.ab.a.aaa(This is not actual ip)  
User-Agent: Apache-HttpClient/4.5.1 (Java/1.7.0_79)   
breadcrumbId: ID-ip-abc-ad-ac-abc-36927-15432193242455-7-90    
EXTR_SERVICE_URL: http://abs.ab.a.abc/GenieWebService/documentgenerator.xmzx  
X-Forwarded-For: 111.93.62.106, 165.225.106.106  
X-Forwarded-Port: 80  
X-Forwarded-Proto: http 

HTTP 请求标头(工作流程)

POST /GenieWebService/documentgenerator.asmx HTTP/1.1  
Content-Length: 66831  
Content-Type: text/xml;charset=utf-8  
Authorization: Basic ZXNidXNlcjpwYXNzd29yZA==  
Cookie: ASP.NET_SessionId=lairgud4nkaledjpuzarfqj0  
Host: abc.ab.a.abc
User-Agent: Jakarta Commons-HttpClient/3.1    
breadcrumbId: ID-ip-abc-ab-a-abc-34162-1542796372800-25-80  
EXTR_SERVICE_URL: http://abs.ab.a.abc/GenieWebService/documentgenerator.asmx   
X-Forwarded-For: 112.196.86.34, 165.225.106.89  
X-Forwarded-Port: 80  
X-Forwarded-Proto: http

根据我的理解,cookie 标头似乎存在问题。在 http4 请求标头中,我无法在 http 标头中看到 cookie 标头。 有人可以帮助这里有什么问题,如果是 cookie 标头,那么我如何添加 cookie。我正在使用 spring dsl 和 apache-camel 2.16.3 版本。

【问题讨论】:

    标签: http apache-camel


    【解决方案1】:

    您可以通过指定 http4://foo?httpClient.soTimeout=100 在客户端上设置 100 毫秒的超时。当发生超时时,它可能会抛出一个异常,您可以像这样处理:

    onException(IOException.class).to("direct:timeouts");
    
    from("direct:start")
    .setHeader(Exchange.HTTP_QUERY,simple("format=json&count=${in.headers.count}"))
    .to("http4://www.host.com/someapi?httpClient.soTimeout=100")
    .unmarshal().json(JsonLibrary.JACKSON,MyResponseType.class)
    .to("bean:SomeBean?method=echo");
    
    from("direct:timeouts").to("...");
    

    【讨论】:

      【解决方案2】:

      我使用了 httpClient.socketTimeout=180000 而没有使用 bridgeEndpoint 选项,所以骆驼将使用我在标头中设置的 http url。下面是我的路线。

      <route> 
          <from uri="{{document-service.esb.new.document.internal.req.queue.name}}"/>     
          <convertBodyTo type="javax.xml.transform.dom.DOMSource" charset="utf-8"/>    
          <process ref="document-serviceHttpUrlResolver"/>      
          <removeHeaders pattern="CamelHttp*"/>    
          <removeHeaders pattern="JMS*"/>    
          <setHeader headerName="SOAPAction">    
              <xpath resultType="java.lang.String">function:properties('document-service.esb.new_genie.document.service.soap.action')</xpath>  
          </setHeader>                
          <setHeader headerName="CamelHttpUri">
              <xpath resultType="java.lang.String">in:header('EXTR_SERVICE_URL')</xpath>
          </setHeader>
          <!--CamelHttpUri value will be - http://xyz.xy.x.bcd/WebGenie/DocumentGenerator.svc-->              
          <setHeader headerName="Content-Type">
              <xpath resultType="java.lang.String">function:properties('http.content.type.value')</xpath>
          </setHeader>                                                            
          <process ref="document-serviceSoapWrapper"/>
          <log message="*** A request message sent to New Genie service: ${body}" loggingLevel="INFO" logName="document-service"/>                
          <to uri="http4://abc.ab.a.abc/GenieWebService/documentgenerator.asmx?httpClient.socketTimeout=180000"/>         
          <convertBodyTo type="javax.xml.transform.dom.DOMSource" charset="utf-8"/>               
          <to uri="{{document-service.esb.new.document.internal.resp.queue.name}}{{document-service.esb.internal.queue.parameters}}" pattern="InOnly"/>
      </route>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多