在骆驼路线中实现计数器变量
Implement counter variable in camel route
我正在尝试从数据库中获取员工详细信息列表并使用 REST API 将其推送到外部系统。我能够为上述流程创建路线。
另外,我想知道创建和失败记录的数量。所以我通过将 属性 的值设置为 0 创建了一个计数器,然后递增 属性 的值。当我尝试增加 属性 值时,它总是与我初始化的相同。
from("direct:test")
.setBody(constant("select name as name, location as location,mobile as mobile from employee"))
.to("jdbc:testdb")
.process(exchange ->{
// Custom Logic which will convert list of Employee Details
})
.split(body())
.setProperty("successrec", simple("0"))
.setProperty("failurerec", simple("0"))
.doTry()
.setProperty("successrec", simple("${property.successrec++}"))
.to("http://test/upload/employee")
.doCatch((Exception.class)).process( exchange ->{
Integer failureRecords=exchange.getProperty("failurerec",Integer.class);
exchange.setProperty("failurerec", failureRecords++);
});
我什至尝试使用处理器来设置和获取 属性 值,但没有成功。有没有什么办法可以统计成功和失败的记录呢
属性是交易所的本地属性,因此您可能需要使用 Route Policy 来注入全局计数器。
创建路由策略:
class MyRoutePolicy extends RoutePolicySupport {
private AtomicInteger counter = new AtomicInteger();
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
exchange.setProperty("counter", counter);
}
public int getCounter() {
return counter.get();
}
};
将策略关联到路由:
MyRoutePolicy policy = new MyRoutePolicy();
from("direct:test")
.routePolicy(policy)
...
这是可能的解决方案之一,但您也可以使用全局计数器,这取决于您的需要,它可能更简单。
此政策有效:
public class MyRoutePolicy extends RoutePolicySupport {
private AtomicInteger counter = new AtomicInteger();
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
exchange.setProperty("counter", counter.incrementAndGet());
}
public int getCounter() {
return counter.get();
}
};
我正在尝试从数据库中获取员工详细信息列表并使用 REST API 将其推送到外部系统。我能够为上述流程创建路线。
另外,我想知道创建和失败记录的数量。所以我通过将 属性 的值设置为 0 创建了一个计数器,然后递增 属性 的值。当我尝试增加 属性 值时,它总是与我初始化的相同。
from("direct:test")
.setBody(constant("select name as name, location as location,mobile as mobile from employee"))
.to("jdbc:testdb")
.process(exchange ->{
// Custom Logic which will convert list of Employee Details
})
.split(body())
.setProperty("successrec", simple("0"))
.setProperty("failurerec", simple("0"))
.doTry()
.setProperty("successrec", simple("${property.successrec++}"))
.to("http://test/upload/employee")
.doCatch((Exception.class)).process( exchange ->{
Integer failureRecords=exchange.getProperty("failurerec",Integer.class);
exchange.setProperty("failurerec", failureRecords++);
});
我什至尝试使用处理器来设置和获取 属性 值,但没有成功。有没有什么办法可以统计成功和失败的记录呢
属性是交易所的本地属性,因此您可能需要使用 Route Policy 来注入全局计数器。
创建路由策略:
class MyRoutePolicy extends RoutePolicySupport {
private AtomicInteger counter = new AtomicInteger();
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
exchange.setProperty("counter", counter);
}
public int getCounter() {
return counter.get();
}
};
将策略关联到路由:
MyRoutePolicy policy = new MyRoutePolicy();
from("direct:test")
.routePolicy(policy)
...
这是可能的解决方案之一,但您也可以使用全局计数器,这取决于您的需要,它可能更简单。
此政策有效:
public class MyRoutePolicy extends RoutePolicySupport {
private AtomicInteger counter = new AtomicInteger();
@Override
public void onExchangeBegin(Route route, Exchange exchange) {
exchange.setProperty("counter", counter.incrementAndGet());
}
public int getCounter() {
return counter.get();
}
};