почему?
мы переходят из ibm mq rabbitmq. В настоящее время это работает
как это: < /p>
Код: Выделить всё
@JmsListener(destination = "${jms.topic})
public void receiveMessage(@NonNull Message message) {
Object payload = message.getPayload();>
processByType(payload);
}
< /code>
Я хотел бы иметь что -то подобное: < /p>
@RabbitListener(queues = "${queue-name}", messageConverter = "myMessageConverter")
public void receiveMessage(@Payload Object payload) {
// use existing logic
processByType(payload);
}
Я нашел информацию, что метод должен иметь один метод. Mypayload ). и это работает. < /p>
Код: Выделить всё
@RabbitListener(queues = "${queue-name}", messageConverter = "myMessageConverter")
public void receiveMessage(@Payload MyPayload payload) { ... }
< /code>
Он даже работает для типов сообщений, унаследованных от общего интерфейса, например, myinboundpayload. < /p>
@RabbitListener(queues = "${queue-name}", messageConverter = "myMessageConverter")
public void receiveMessage(@Payload MyInboundPayload payload) { ... }
< /code>
И я бы использовал эту опцию, но половина типов полезной нагрузки - это библиотечные классы, импортируемые из других услуг. И я не могу заставить их реализовать myInboundpayload < /code>. < /P>
Итак, кто -нибудь знает, как заставить его передать уже преобразованное сообщение методу?
Это возможно? < /P>
public void receiveMessage(@Payload Object payload)
< /code>
Спасибо! < /p>
Текущая конфигурация: < /strong> < /p>
@Bean
public MessageConverter myMessageConverter() {
ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule())
.registerModule(new ParanamerModule())
.registerModule(new SingleArgConstructorModule("com.xyz.api"))
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
return new Jackson2JsonMessageConverter(objectMapper);
}
< /code>
p.s. Я знаю, что я могу обработать сообщение Подробнее здесь: https://stackoverflow.com/questions/795 ... ct-payload