首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骆驼Netty4引起无限反馈回路

骆驼Netty4引起无限反馈回路
EN

Stack Overflow用户
提问于 2016-03-04 16:49:36
回答 1查看 118关注 0票数 1

我正在尝试用camel netty4组件实现UDP握手。在接收hello消息时,应用程序将hello消息中的一个标志标记为ACKed,并将其发送回发起人(processRoute)。

下面的计时器路线是模拟从UDP_REMOTE发送到我们的应用程序(UDP_LOCAL)的周期性hello消息。checkRoute检查发起人是否接收到ACKed hello消息。

使用下面的代码,该组件似乎会导致无限反馈循环。涉及到的核心库是骆驼弹簧引导(2.16.1)和弹簧引导(1.3.2.RELEASE)。我知道那一定是我的错。如果有人能告诉我正确的方法,那就太好了。提前谢谢。

代码语言:javascript
复制
    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"));
            }
        };
    }

原木看起来像这样

代码语言:javascript
复制
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
...
EN

回答 1

Stack Overflow用户

发布于 2016-03-04 21:08:23

它与netty组件的请求/响应的配置有关。

  1. “本地”接收消息,打印消息,并将其发送到“远程”
  2. “遥控器”接收消息打印出来..。并向原点发送回复:即“本地”
  3. “当地人”收到消息..。cf 1

检查端点上的sync属性,以禁用netty组件上的响应。

代码语言:javascript
复制
private static final String UDP_LOCAL = "netty4:udp://localhost:4466?sync=false";
private static final String UDP_REMOTE = "netty4:udp://localhost:8899?sync=false";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35801582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档