【发布时间】:2018-09-07 04:21:46
【问题描述】:
我有一个非常简单的骆驼路由器,它使用 SQS 和 base64 解码:
from("aws-sqs://test-camel-start?amazonSQSClient=#sqsClient&concurrentConsumers=2&maxMessagesPerPoll=1")
.unmarshal()
.base64()
.process(new BaseProcessor())
.to("aws-sqs://test-camel-success?amazonSQSClient=#sqsClient").end();
我的测试处理器:
public boolean process(Exchange exchange, AsyncCallback callback) {
try {
String header = (String) exchange.getIn().getHeader("CamelAwsSqsMessageId");
String message = exchange.getIn().getBody(String.class);
MDC.put("message-id", header);
Thread.sleep(5 * 1000);
LOG.info("Async ping");
LOG.info(message);
} catch (Throwable e) {
LOG.error(e.getMessage(), e);
exchange.setException(e);
}
callback.done(false);
return false;
}
所以我有下一个情况: 1)骆驼成功地从“test-camel-start”队列中读取消息 2) BaseProcessor 成功处理消息 3) 在重试向“test-camel-success”传递消息时失败
我收到了下一个日志跟踪:
637435 [Camel (HomeCamelSQS) 线程 #2 - aws-sqs://test-camel-start] 错误 oacprocessor.DefaultErrorHandler cr.id=18b85e94-bc2f-44dd-baef-4bcd4fb79e0c - (MessageId: ExchangeId 上的 ID-DESKTOP-5SBC4FA-1522239559145-0-6:ID-DESKTOP-5SBC4FA-1522239559145-0-5)。交付尝试后用尽:1 捕获:com.amazonaws.services.sqs.model.AmazonSQSException:请求必须包含参数 MessageBody。 (服务:AmazonSQS;状态码:400;错误码:MissingParameter;请求 ID:85604fc2-0724-5d16-af6b-1cf78a24e8b0)
消息历史记录
RouteId ProcessorId 处理器已用(毫秒) [route1] [route1] [aws-sqs://test-camel-start?amazonSQSClient=%23sqsClient&concurrentConsumers=2&] [7591] [route1] [unmarshal1] [unmarshal [org.apache.camel.model.dataformat.Base64DataFormat@237080aa]] [1] [route1] [process1] [处理器@0x5007bde9] [7417] [route1] [to1] [aws-sqs://test-camel-success?amazonSQSClient=#sqsClient] [172]
堆栈跟踪
com.amazonaws.services.sqs.model.AmazonSQSException:请求必须包含参数 MessageBody。 (服务:AmazonSQS;状态代码:400;错误代码:MissingParameter;请求 ID:85604fc2-0724-5d16-af6b-1cf78a24e8b0) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1638) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1303) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1055) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) 在 com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:2013) 在 com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1989) 在 com.amazonaws.services.sqs.AmazonSQSClient.executeSendMessage(AmazonSQSClient.java:1594) 在 com.amazonaws.services.sqs.AmazonSQSClient.sendMessage(AmazonSQSClient.java:1571) 在 org.apache.camel.component.aws.sqs.SqsProducer.process(SqsProducer.java:62) 在 org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) 在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:138) 在 org.apache.camel.processor.Pipeline.access 100 美元(Pipeline.java:43) 在 org.apache.camel.processor.Pipeline$1.done(Pipeline.java:157) 在 org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:262) 在 org.apache.camel.processor.RedeliveryErrorHandler$2.done(RedeliveryErrorHandler.java:560) 在 com.home.camel_poligon.BaseProcessor.process(BaseProcessor.java:35) 在 org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:110) 在 org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:138) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:101) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) 在 org.apache.camel.component.aws.sqs.SqsConsumer.processBatch(SqsConsumer.java:206) 在 org.apache.camel.component.aws.sqs.SqsConsumer.poll(SqsConsumer.java:111) 在 org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174) 在 org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
日志说“请求必须包含参数MessageBody”。
而且我不知道为什么没有这个消息正文。
【问题讨论】:
标签: java apache-camel