当前位置: 首页 > 知识库问答 >
问题:

骆驼SQS解组

璩珂
2023-03-14
 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)基处理器成功地处理消息3)在重试将消息传递到“test-camel-success”时失败

我收到了下一个日志跟踪:

Log说“请求必须包含参数MessageBody”。

我不知道为什么这个消息体没有出现。

共有1个答案

姬寂离
2023-03-14

请参阅以下常见问题解答:http://camel.apache.org/why-is-my-message-body-empty.html

在处理器中,您可以将消息正文转换为记录的字符串。由于消息主体是基于流的(例如base64的输出),它将读取主体到流的结尾,然后消息将被视为空的。

您可以在处理器中打开流缓存或不进行此手动日志记录。

 类似资料:
  • 所以我尝试使用ApacheCamel访问简单队列服务。 JavaDSL方法很好,但我尝试使用xml配置。 上面的代码工作正常,但我决定构建bean。 我犯了个错误 无法将[java.lang.String]类型的属性值转换为属性“Region”所需的[com.amazonaws.regions.Region]类型;嵌套的例外是java。lang.IllegalStateException:无法将[

  • 我正在使用带有Apache骆驼的Spring Boot。我正在从控制器调用路由。一旦路由完成,控制就会返回控制器。我正在VerifyLimitProcess和批准限制处理器中生成响应。如果我没有在路由中提供窃听配置,控制器会按预期检索标头和正文。但如果我在路由中引入窃听,控制器会将标头和正文接收为null。如果有人指出我需要做什么,以便我可以在选择语句中引入两个处理器的窃听配置,即VerifyLi

  • 我有一条小路线,我想使用自定义的重新传递策略来重复向endpoint发送消息,但这种行为非常奇怪。看起来,重新交付政策只是在重复一个错误。我试图将所有交换发送到路由的开头,但策略不起作用,因为每次都在创建: 我做错了什么?当错误发生时,我想以间隔重复我的请求。我的骆驼版本是2.6 日志:

  • 我正在遵循位于Camel MyBatis Integration guide的安装指南。我使用的是Service Mix 5.0.1。我使用了安装spring mybatis的功能,它支持3.2.4。释放我的SqlMapConfig文件只包含有关TypeHandler和TypeAlias的信息。 当我开启服务混合,然后启动我的应用程序,我收到以下堆栈跟踪: ...还有50个 我的Bean定义如下:

  • 我有一个Quarkus应用程序,它使用Apache-Camel并在本地运行良好。当我构建它并尝试运行docker容器时,我收到以下错误: 我的分级依赖关系是 } 当我在IntelliJ终端中使用“夸克斯开发”运行它时,我没有问题。我是否尝试运行容器,但会出现错误。为什么会发生这种情况?我不知道如何解决它。 编辑: 处理HttpException的位置: 处理程序本身: }

  • 我试图弄清楚骆驼的节流概念。我已经看到了骆驼的航线政策,但这适用于许多飞行中的交换。 我的路线如下: 现在我的用例是,我想在这些路由之间传输比如说2000条消息,我知道可以通过来完成。但是,我不得不决定如何在下一个2000条消息被路由时控制它。我只想在接收者队列变为空时路由下2000条消息。 例如,消息从队列路由到。假设2K消息已成功路由,现在我想挂起我的路由,这样它就不会传输更多的消息,直到队列