Я выполнил свой предыдущий вопрос Сообщение Spring Cloud Stream из / в преобразование JSON конфигурация и настроенный поток, как описано, но я не могу заставить его работать правильно.
Моя установка выглядит следующим образом. У меня есть два приложения A
и B
. Приложение A
использует входной канал one
, выходной two
. Приложение B
использует ввод two
. Канал two
настроен с типом содержимого application/json
.
Приложение A. Свойства.
spring.cloud.stream.bindings.input.destination=one
spring.cloud.stream.bindings.input.group=default
spring.cloud.stream.bindings.output.destination=two
spring.cloud.stream.bindings.output.content-type=application/json
Метод слушателя.
@ServiceActivator(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
public Dto handle(byte[] payload) throws IOException {
final Dto dto = new ObjectMapper().readValue(payload, Dto.class);
logger.info("{}", dto);
dto.setId(dto.getId() + 1000);
return dto;
}
Приложение Б. Свойства.
spring.cloud.stream.bindings.input.destination=two
spring.cloud.stream.bindings.input.group=default
spring.cloud.stream.bindings.input.content-type=application/json
Метод слушателя.
@ServiceActivator(inputChannel = Sink.INPUT)
public void handle(Dto dto) throws IOException {
logger.info("DTO {}", dto);
}
Когда я вручную отправляю сообщение с правильной строкой JSON на канал one
, оно обрабатывается правильно и отправляется на канал two
как сообщение JSON (заголовки точно такие же, как описано в вышеупомянутом вопросе). После этого приложение B получает его по каналу two
, и выдается исключение: Method handle(java.lang.String) cannot be found
Конечно, когда я создаю оба метода, обрабатывая Dto и String в качестве входных данных, он работает, но всегда вызывается метод String, и мне приходится десериализовать полезную нагрузку самостоятельно.
Я где-то ошибаюсь? Как настроить метод с такой подписью: public Dto handle(Dto incoming)
?
StreamListener
вместоServiceActivator
для своего приложения Б? Я не уверен на 100%, но думаю, что вашу проблему можно было решить с помощьюStreamListener
вместо изменения свойстваcontent-type
. - person Gooseman   schedule 29.01.2017