sách gpt4 ai đã đi

apache-camel - Camel 工作单元

In lại 作者:行者123 更新时间:2023-12-05 03:05:04 26 4
mua khóa gpt4 Nike

我想了解 Camel 中的工作单元概念。我有一个简单的问题,希望这里有人可以提供帮助。

例如,如果路由 Exchange 涉及多个路由

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

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

from("direct:aws-post").to("htt4:myservice");//route3

是否在每条路线的末尾调用了工作单元?或者仅在 route3 的末尾?在我的示例中,一旦 route1 完成,SQS 消息是否会从 SQS 中删除?还是会等到我的消息到达“myservice”?

Cảm ơn.

跟进:

我稍微修改了路线:

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

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

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

1 Câu trả lời

MỘT unit of work基本上是一种交易。

默认情况下,路由( Camel Exchange)的消息在单个 UnitOfWork 上下文中运行。

在您的示例中,设置了 3 个 UnitOfWork,从每个 từ 开始,在每个路线的最后一个 ĐẾN 结束。

我希望来自 SQS 的消息在第一条路线完成后被消费。要进行测试,您可以添加 sleep 以允许您检查队列。

from("direct:processMe").process(new Processor() 
{ void process() { try { Thread.sleep(60000L) } catch (Exception e) { } }
}).to("direct:aws-post")

如果您希望消息在 myservice 收到消息之前一直保留在队列中,那么您需要将处理放在一个路由中。

关于apache-camel - Camel 工作单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371202/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com