@Rabbitlistener с MessageConverter и @payload объект полезной нагрузкиJAVA

Программисты JAVA общаются здесь
Anonymous
@Rabbitlistener с MessageConverter и @payload объект полезной нагрузки

Сообщение Anonymous »

Я ищу способ использования того же метода для получения сообщений, преобразованных MyMessAgeConverter для объекта в зависимости от __typeid __ Header.
почему?
мы переходят из 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. Я знаю, что я могу обработать сообщение 
, а затем получить тип и вручную конвертировать в тип. Но мне интересно, есть ли способ сделать с возможностями @rabbitlistener .

Подробнее здесь: https://stackoverflow.com/questions/795 ... ct-payload

Вернуться в «JAVA»