Spring При маршрутизации inputChannel первый канал всегда неверен - PullRequest
0 голосов
/ 19 декабря 2018

Я использую

  • spring -gration-java-dsl-1.2.3.RELEASE
  • spring -gration-ip-4.3.17.RELEASE
  • spring -gration-http-4.3.17.RELEASE

Данный код предназначен для динамической генерации TCP-соединений.Я определяю ReveiverAdapter и SenderAdapter.

IntegrationFlow ifr = existsConnection(connectionId);
    if (ifr == null) {
        TcpNetClientConnectionFactory cf = new TcpNetClientConnectionFactory(host, port);
        final ByteArrayLengthHeaderSerializer by = new ByteArrayLengthHeaderSerializer(headBytes);
        cf.setSingleUse(false);
        cf.setSoKeepAlive(true);
        cf.setSerializer(by);
        cf.setDeserializer(by);
        cf.setComponentName(connectionId);

        //Inbound Adapter 
        TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
        adapter.setConnectionFactory(cf);
        adapter.setClientMode(true);
        adapter.setErrorChannelName("errorChannel");
        adapter.setRetryInterval(retryInterval);
        adapter.setOutputChannel(bme.fromTcp());
        //OutBound Adapter
        TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
        sender.setConnectionFactory(cf);

        ifr = IntegrationFlows.from(adapter)
                .enrichHeaders(h -> h.header("connectionId",connectionId))
                .handle(sender).get();

        this.flowContext.registration(ifr).id(connectionId+CONNECTION_SUFFIX).addBean(cf).register();

Когда я пытаюсь перенаправить на правильный канал при первом запуске, я получаю «fromTcp» вместо адаптера отправителя, когда я восстанавливаю канал из IntegrationFlow.getInputChannel ()

1 Ответ

0 голосов
/ 19 декабря 2018

Я думаю, у вас есть где-то еще один подписчик для этого bme.fromTcp(), поэтому в потоке вы получаете еще одного с .enrichHeaders(), и я предполагаю, что fromTcp - это DirectChannel, который основан на RoundRobinLoadBalancingStrategyпо умолчанию, поэтому входящие сообщения сбалансированы между вашими подписчиками.

Не уверен, каково ваше намерение, но подумайте, не вставляйте bme.fromTcp() в TcpReceivingChannelAdapter, а Java DSL позаботится о неявном внедрении канала в Betweed from(adapter) и .enrichHeaders().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...