Я потратил последнее немного, пытаясь получить его, чтобы обработчик, зарегистрированный с помощью @RabbitListener, передал сообщение с помощью Jackson2JsonMessageConverter. К сожалению, независимо от того, какую конфигурацию я пытаюсь использовать только SimpleMessageConverter.Использование @RabbitListener с Jackson2JsonMessageConverter
@Component
@Slf4j
public class TestQueueListener {
@RabbitListener(queues = "#{@allQueue}")
public void processMessage(String data) {
log.trace("Message received: {}", data);
}
@RabbitListener(queues = "#{@invokeQueue}")
public void processSpawnInstanceMessage(TestConfig config) {
log.trace("Invoking with config: {}", config);
invokeSomeMethod(config);
}
}
Это конфиг у меня есть в настоящее время, что я думаю, что ближе всего к тому, что документируется:
@Configuration
@EnableRabbit
public class MessagingConfiguration {
@Bean
public MessageConverter messageConverter() {
ContentTypeDelegatingMessageConverter messageConverter = new ContentTypeDelegatingMessageConverter();
messageConverter.addDelgate("application/json", new Jackson2JsonMessageConverter());
return messageConverter;
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(messageConverter);
return rabbitTemplate;
}
@Bean
public TopicExchange testExchange() {
return new TopicExchange("test");
}
@Bean
public Queue allQueue() {
return new Queue("all", false, true, true);
}
@Bean
public Binding allBinding(TopicExchange testExchange, Queue allQueue) {
return BindingBuilder.bind(allQueue).to(testExchange).with("*");
}
@Bean
public Queue invokeQueue() {
return new Queue("invoke", false, true, true);
}
@Bean
public Binding invokeBinding(TopicExchange testExchange, Queue invokeQueue) {
return BindingBuilder.bind(invokeQueue).to(testExchange).with("invoke");
}
}
Что я понимаю до сих пор, что там, где я застрял, что RabbitTemplate используется, когда отправив сообщение из приложения в RabbitMQ. Поэтому я понимаю, почему мой специальный MessageConverter не используется для вызова Handler. К сожалению, я не вижу, как настроить MessageConverter на входящей стороне. Как использовать MessageConverter, который я настроил с входящими сообщениями?
я прочитал, что в документации несколько раз и даже в какой-то момент помните реализации этого метода, который вы перечислили, но Бесполезный» похоже, работает. Пробовал снова сейчас, и он отлично работает. Теперь работаем через classMapper, так как мой клиент не будет предоставлять тип класса в заголовке. –
Просто наткнулся на эту зависимость ClassMapper - как вы подошли к этой проблеме? – Spiff