我正在尝试用camel netty4组件实现UDP握手。在接收hello消息时,应用程序将hello消息中的一个标志标记为ACKed,并将其发送回发起人(processRoute)。
下面的计时器路线是模拟从UDP_REMOTE发送到我们的应用程序(UDP_LOCAL)的周期性hello消息。checkRoute检查发起人是否接收到ACKed hello消息。
使用下面的代码,该组件似乎会导致无限反馈循环。涉及到的核心库是骆驼弹簧引导(2.16.1)和弹簧引导(1.3.2.RELEASE)。我知道那一定是我的错。如果有人能告诉我正确的方法,那就太好了。提前谢谢。
private static final String UDP_LOCAL = "netty4:udp://localhost:4466";
private static final String UDP_REMOTE = "netty4:udp://localhost:8899";
private static final AtomicInteger counter = new AtomicInteger();
private final class PrintProcessor implements Processor {
private final String name;
public PrintProcessor(String name) {
this.name = name;
}
@Override
public void process(Exchange exchange) throws Exception {
byte[] body = exchange.getIn().getBody(byte[].class);
System.err.println(name + "\t[b]==>" + new String(body));
}
}
@Bean
public RouteBuilder RouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("timer://poller?period=5s").process(exchange -> {
exchange.getIn().setBody("Hello" + counter.incrementAndGet());
System.err.println("Sending Hello...");
}).to(UDP_LOCAL);
from(UDP_LOCAL).id("processRoute").process(new PrintProcessor("processRoute")).to(UDP_REMOTE);
from(UDP_REMOTE).id("checkRoute").process(new PrintProcessor("checkRoute"));
}
};
}原木看起来像这样
Sending Hello...
processRoute [b]==>Hello1
checkRoute [b]==>Hello1
checkRoute [b]==>Hello1
processRoute [b]==>Hello1
checkRoute [b]==>Hello1
checkRoute [b]==>Hello1
processRoute [b]==>Hello1
checkRoute [b]==>Hello1
checkRoute [b]==>Hello1
processRoute [b]==>Hello1
...发布于 2016-03-04 21:08:23
它与netty组件的请求/响应的配置有关。
检查端点上的sync属性,以禁用netty组件上的响应。
private static final String UDP_LOCAL = "netty4:udp://localhost:4466?sync=false";
private static final String UDP_REMOTE = "netty4:udp://localhost:8899?sync=false";https://stackoverflow.com/questions/35801582
复制相似问题