【问题标题】:Mule: DB Insert fails with timeoutMule:数据库插入失败并超时
【发布时间】:2017-04-03 00:44:27
【问题描述】:

我正在尝试将数据插入数据库表中,但出现以下错误:

异常堆栈是: 1.超时(java.util.concurrent.TimeoutException) com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider:426(空) 2.发送HTTP请求时出错。消息负载的类型:字符串 (org.mule.api.MessagingException) org.mule.module.http.internal.request.DefaultHttpRequester:287 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)


根异常堆栈跟踪: java.util.concurrent.TimeoutException:超时 在 com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:426) 在 com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:274) 在 org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:398) 在 org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:377) 在 org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:158) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)


我的插入代码如下:

     <flow name="api-main">
   <http:listener config-ref="db-system-api-httpListenerConfig" path="/api/*" doc:name="HTTP"/>
    <apikit:router config-ref="db-system-api-config" doc:name="APIkit Router"/>
    <exception-strategy ref="db-system-api-apiKitGlobalExceptionMapping" doc:name="Reference Exception Strategy"/>
    </flow>

    <flow name="put:/contract/{id}:db-system-api-config" processingStrategy="synchronous" >
    <set-property propertyName="Content-Type" value="application/json" doc:name="Set Content Type"/>
    <logger message="#[payload]" level="INFO" doc:name="Initial Payload"/>

    <json:json-to-object-transformer returnClass="java.util.HashMap" mimeType="text/plain" doc:name="JSON to Object"/>


        <foreach collection="#[payload.entrySet()]" doc:name="For Each">
        <db:insert config-ref="Oracle_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[INSERT INTO XX.XX_OE_HDR (ID,
                                                                               NUMBER,
                                                                                EFF_START_DATE,
                                                                                EFF_END_DATE,   
                                                                                CUST_NUMBER) 
                                                                                VALUES (xx.XX_HDR_SEQ.NEXTVAL,   
                                                                                        xx.XX_HDR_NUM_SEQ.NEXTVAL,
                                                                                       TO_DATE('2017-05-23','YYYY-MM-DD HH24:MI:SS'),
                                                                                       TO_DATE('2017-06-23','YYYY-MM-DD HH24:MI:SS'),
                                                                                        #[payload.myField])]]></db:parameterized-query>
         </db:insert>
         </foreach>
        <logger message="Record successful" level="INFO" doc:name="Log Success"/>

【问题讨论】:

  • 任何输入任何人?

标签: mule


【解决方案1】:

根据Timeout exceeded at com.ning.http.client,您的问题位于 http 请求中。据我所知,Oracle 数据库(与大多数常见数据库一样)使用 TCP 协议进行传输,而您的问题位于 http 超时。

您能否提供完整的流程以及如何触发流程?

另一方面,您能否尝试隔离问题并将数据库替换为记录器并检查您对流的 http 请求是否没有问题? (假设您是通过 http 请求触发此流程)

【讨论】:

  • 感谢马里奥的回复,请查看更新的代码。我会尝试用记录器替换数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2021-04-09
  • 2021-11-24
相关资源
最近更新 更多