gpt4 book ai didi

java - Apache Camel : How to transmit exceptions over a SEDA endpoint?

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:56 24 4
gpt4 key购买 nike

当我在 Camel 上下文组件中向其端点发送消息时,我必须等待带有确认的响应消息。如果在超时时间内没有收到响应,则会向camel路由抛出异常。

我尝试通过以下方式实现它:当原始消息发送到端点时,我使用多播来生成超时响应。超时响应会被延迟,如果超时后没有收到响应,则路由上会抛出超时异常。

所以我有以下路线:

private final String internalRespUri = "direct:internal_resp";
private final String internalRespTimeout = "seda:internaltimeout";

@Override
public void configure() {
SendController send_controller = new SendController();
TimeoutResponse resp = new TimeoutResponse();

from(Endpoints.MESSAGE_IN.direct())
.errorHandler(noErrorHandler())
.routeId(Endpoints.MESSAGE_IN.atsm())
.log("Incoming message at segment in")
.process(send_controller)
.log("Message after send controller")
.multicast().parallelProcessing()
.log("After wiretap")
.to(internalRespTimeout, Endpoints.SEGMENT_OUT.direct());
from(internalRespTimeout)
.errorHandler(noErrorHandler())
.routeId(internalRespTimeout)
.log("begin response route")
.log("timeout response route")
.process(resp)
.log("modify message to response")
.delay(1000)
.log("after delay")
.to(internalRespUri);
from(Endpoints.SEGMENT_IN.seda())
.routeId(Endpoints.SEGMENT_IN.atsm())
.to(internalRespUri);
from(internalRespUri)
.errorHandler(noErrorHandler())
.routeId(internalRespUri)
.log("after response gathering point")
.choice()
.when(header(HeaderKeys.TYPE.key()).isEqualTo(UserMessageType.RESP.toString()))
.log("process responses")
.process(send_controller)
.otherwise()
.log("no response")
.to(Endpoints.MESSAGE_OUT.direct());
}

问题在于 SendController 中引发的异常不会通过 SEDA 端点InternalRespTimeout 传播。如果我使用直接端点,它可以工作,但我还有另一个问题:延迟会阻塞路由,同时可能无法传输从端点 Endpoints.SEGMENT_IN.seda() 接收到的响应消息。

SEDA 端点通常无法传播异常吗?我怎样才能解决我的问题?

谢谢,斯文

最佳答案

我有一个想法:

我可以使用事务来实现超时,而不是抛出异常。

这可行吗?

关于java - Apache Camel : How to transmit exceptions over a SEDA endpoint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36645978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com