小编Tel*_*pdx的帖子

骆驼工作单元

我试图理解骆驼中的工作单元概念。我有一个简单的问题希望这里有人可以提供帮助。

例如,如果路由交换涉及多个路由

from("aws-sqs:Q1").to("direct:processMe");//route1

from("direct:processMe").to("direct:aws-post");//route2

from("direct:aws-post").to("htt4:myservice");//route3
Run Code Online (Sandbox Code Playgroud)

工作单元是否在每条路由结束时调用?还是只在路线 3 的末端?在我的示例中,一旦route1完成,SQS消息是否会从SQS中删除?或者它会等到我的消息到达“myservice”?

谢谢。

跟进:

我稍微修改了路线:

from("aws-sqs:Q1").to("direct:processMe");//route1

from("direct:processMe").process(
   new Processor(){
       public void process(Exchange exchange) throws Exception {
          throw new RuntimeException("fail on purpose");
       }
   }
).to("direct:aws-post");//route2

from("direct:aws-post").to("http4:myservice");//route3
Run Code Online (Sandbox Code Playgroud)

思考过程是这样的:如果在每个路由末尾调用工作单元,那么一旦从 SQS 队列读取消息,SQS 组件就会确认该消息已读取。另一方面,如果仅在 Exchange 完成所有路由的路由后才调用工作单元,则路由 2 中的异常将导致消息未被确认,并且一旦可见期到期即可重新传递。

测试表明,尽管已通过第一条路线读取,该消息仍保留在 Q 上。它被一次又一次地拾取(直到它以死信 q 结束)。因此,我坚信单元边界是由路由的 Exchange 末端定义的。

apache-camel

7
推荐指数
1
解决办法
3092
查看次数

如何在 AggregationStrategy 中优雅地将 newExchange 从 JSON 解组为 POJO

是否有使用自定义聚合策略将 JSON 解组为 Apache Camel 中的 POJO 的优雅方法?

我的简单路由从 SQS 获取一条消息,该消息是 JSON。此消息用作另一个服务的输入,而后者又根据消息内容让我知道原始消息应发布到的服务的 URL 是什么。

使用 AggregationStrategy 丰富 EIP 非常适合这一点。但是,我无法弄清楚如何在路由中优雅地将 JSON 解组为 POJO。我可以通过 ObjectMapper 做到这一点,但这看起来很难看。有没有更好的处理方法?一些我还没见过的神奇骆驼酱?

public RouteBuilder route() {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("aws-sqs://" + sqsName + "?amazonSQSClient")
            .setHeader("Content-Type",simple("application/json"))
            .enrich()
            .simple("http4://localhost:8080/getUrl")
            .aggregationStrategy(new AggregationStrategy() {
                @Override
                public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
                    String aPojoStr =  newExchange.getIn().getBody(String.class);
                    ObjectMapper mapper = new ObjectMapper();
                    RestAnswererResponse responosePojo;
                    try {
                        responosePojo = mapper.readValue(aPojoStr, RestAnswererResponse.class);
                    } catch (JsonParseException e) { …
Run Code Online (Sandbox Code Playgroud)

json apache-camel unmarshalling

1
推荐指数
1
解决办法
1674
查看次数

标签 统计

apache-camel ×2

json ×1

unmarshalling ×1