Spring Boot / RabbitMQ другой content_type с Jackson2JsonMessageConverter

У меня есть пример использования, когда служба использует разные очереди RabbitMQ.

  • В одной из очередей есть данные в кодировке JSON, где заголовок content_type установлен на application/json
  • Есть вторая очередь, где потребляются двоичные данные, content_type - application/octet-stream

В конфигурации определен MessageConverter:

@Bean
public MessageConverter jsonMessageConverter(){
    return new Jackson2JsonMessageConverter();
}

Потребляющие методы объявлены так:

@RabbitListener(queues = "rpc-device-cmd")
public byte[] rpcCommand(byte[] request) throws IOException, ConfigurationException { .... }

Моя проблема в том, что Jackson2JsonMessageConverter жалуется на application/octet-stream заголовок (Could not convert incoming message with content-type application/octet-stream 'json' keyword missing.) и, что еще хуже, он кодирует ответ byte[] вышеприведенного метода в JSON и base64.

Вопрос:
Как можно убедиться, что конвертер JSON не затрагивает мои ответы byte[] и игнорирует сообщения с типом content_type "не json"?

1 ответ

Решение

Вы достигнете этого, создав свою собственную реализацию MessageConverter для обработки строки ответа rabbitMQ, как показано в приведенном ниже примере.

https://github.com/nidhishkrishnan/messaging - здесь я продемонстрировал, как мы можем маршалировать и преобразовывать строку сообщения RabbitMQ в объект домена Java на основе ключа привязки с помощью MessageConverter

В вашем случае вы можете получить тип содержимого из своего сообщения, чтобы маршалировать вывод в соответствии с вашими требованиями.

String contentType = message.getMessageProperties().getContentType();
Другие вопросы по тегам