gpt4 book ai didi

java - 使用基于时间的 PollingConsumer 到直接端点

转载 作者:行者123 更新时间:2023-11-30 08:42:03 24 4
gpt4 key购买 nike

在功能上,我希望在使用 JMS (WMQ) 端点之前检查 URL 是否处于 Activity 状态。
如果无法访问 URL 或服务器错误,那么我不想从队列中取货。所以我想通过轮询消费者继续尝试(无限制重试)URL。因此,只要它可用,我就可以从 JMS 取货。

我有一个设置了直接端点的 RouteBuilder,它被配置为运行一个将 ping 服务的处理器。

所以:

public class PingRoute extends RouteBuilder {
@Override
public void configureCamel() {
from("direct:pingRoute").routeId(PingRoute.class.getSimpleName())
.process(new PingProcessor(url))
.to("log://PingRoute?showAll=true");
}
}

在另一条 route ,我正在设置我的计时器:

    @Override
public void configureCamel() {
from(timerEndpoint).beanRef(PollingConsumerBean.class.getSimpleName(), "checkPingRoute");
...
}

并且使用 PollingConsumerBean 我试图通过消费者接收正文:

public void checkPingRoute(){
// loop to check the consumer. Check we can carry on with the pick up from the JMS queue.
while(true){
Boolean pingAvailable = consumer.receiveBody("direct:pingRoute", Boolean.class);
...
}

我将路由添加到上下文并使用生产者发送:

context.addRoutes(new PingRoute());
context.start();
producer.sendBody(TimerPollingRoute.TIMER_POLLING_ROUTE_ENDPOINT, "a body");

我得到以下 IllegalArgumentException:

Cannot add a 2nd consumer to the same endpoint. Endpoint Endpoint[direct://pingRoute] only allows one consumer.

有没有办法将直接路由设置为轮询消费者?

最佳答案

不幸的是,业务逻辑不是很清楚。据我了解-您需要等待服务的响应。恕我直言,您必须使用Content Enricher EIP http://camel.apache.org/content-enricher.html . pollEnrich 是您在计时器路由中需要的。

.pollEnrich("direct:waitForResponce", -1).pollEnrich("seda:waitForResponce", -1)

public class PingRoute extends RouteBuilder {
@Override
public void configureCamel() {
from("direct:pingRoute").routeId(PingRoute.class.getSimpleName())
.process(new PingProcessor(url))
.choice().when(body())
.to("log://PingRoute?showAll=true")
.to("direct:waitForResponce")
.otherwise()
.to("direct:pingRoute")
.end();
}
};

计时器:

    @Override
public void configureCamel() {
from(timerEndpoint)
.inOnly("direct:pingRoute")
.pollEnrich("direct:waitForResponce", -1)
...
}

关于java - 使用基于时间的 PollingConsumer 到直接端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724504/

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