Мы используем <int-amqp:publish-subscribe-channel/>
как своего рода шину событий в нашем сервисном приложении. Метод отправки, а также обработчик сообщений основаны на классе Message
из spring-messaging (начиная с spring-integration 4.0 (+). События — это изменения объектов, которые должны быть получены другими службами.
Проблема в том, что класс spring-messaging Message
обрабатывается spring-amqp как произвольная полезная нагрузка объекта, поскольку он не распознается как spring-amqp Message
. Это вызывает следующие проблемы:
- формат сообщений по умолчанию — сериализованные объекты Java. spring-amqp не только сериализует только наш исходный объект полезной нагрузки, но и обертку Spring-сообщений
Message
, которая несовместима между Spring Framework 4.0 и 4.1. - настройка преобразователя сообщений для JSON (точнее,
Jackson2JsonMessageConverter
) не решает проблему, поскольку он также преобразует экземплярMessage
, который являетсяGenericMessage
spring-integration, и который не может быть создан из JSON, поскольку ему не хватает соответствующего конструктора
Нам нужно смешивать версии Spring, так как у нас есть сервисы, реализованные с помощью Grails 2.4 (на основе Spring 4.0) и текущей версии Spring Boot (на основе Spring 4.1).
Есть ли какой-нибудь выход из этого, предпочтительно идиоматический способ пружинной интеграции? Может быть, есть другая абстракция вместо или в дополнение к PublishSubscribeAmqpChannel
? Или любые другие средства преобразования сообщений, которые мы могли бы применить?