проблемы с маршрутизатором интеграции - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь настроить маршрутизатор полезной нагрузки для маршрутизации сообщений в MOM rabbitmq, ibmq и kafka.В некоторых случаях полезная нагрузка должна быть перенаправлена ​​более чем на одну MOM, вот код

@ServiceActivator(inputChannel = "routerChannel", outputChannel = "outputChannel")
public PayloadTypeRouter router(Log message) {
    PayloadTypeRouter router = new PayloadTypeRouter();
    for (Platform platform : new MessageConfig().getConfig(message.getClientKey())) {
        System.out.println("platform type=" + platform.getRouter());
        if (platform.getRouter().equals(BridgeType.Bridge.rabbitmq.toString())) {
            router.setChannelMapping(String.class.getName(), "rabbitChannel");
        } else if (platform.getRouter().equals(BridgeType.Bridge.ibmmq.toString())) {
            router.setChannelMapping(String.class.getName(), "ibmmqChannel");
        } else if (platform.getRouter().equals(BridgeType.Bridge.kafka.toString())) {
            router.setChannelMapping(String.class.getName(), "kafkaChannel");
        }
    }
    return router;
}

, ранее у меня был код, который работал нормально (отправка отдельной MOM, но не двум одновременно)

@Router(inputChannel = "routerChannel")
public String route(Log message) {
    log.info("message in the router='{}'", message.getClientKey());
    for (Platform platform : new MessageConfig().getConfig(message.getClientKey())) {
        System.out.println("platform type=" + platform.getRouter());
        if (platform.getRouter().equals(BridgeType.Bridge.rabbitmq.toString())) {
            return "rabbitChannel";
        } else if (platform.getRouter().equals(BridgeType.Bridge.ibmmq.toString())) {
            return "ibmmqChannel";
        } else if (platform.getRouter().equals(BridgeType.Bridge.kafka.toString())) {
            return "kafkaChannel";
        }
    }
    return "errorChannel";
}

не уверен, что я делаю не так, спасибо за помощь здесь

1 Ответ

0 голосов
/ 17 сентября 2018

PayloadTypeRouter и MethodInvokingRouter поддерживают только один пункт назначения.

Используйте RecipientListRouter с Recipients с MessageSelector с, если вы хотите направить в несколько пунктов назначения.

На самом деле я был не прав; вы можете просто вернуть List<String> из вашего второго примера.

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