Spring-stream отправляет сообщение с типом содержимого text/plain вместо application/json

Я хотел бы генерировать ответы в своей очереди с типом контента application/json, потому что полезная нагрузка содержит объект json.

Но...

Не знаю, почему мой spring-stream (на основе RabbitMQ) всегда генерирует сообщение с заголовками ниже (полезная нагрузка верна и имеет форму JSON).

(view from rabbit ui)
properties:
    delivery_mode:  2
    headers:    
      contentType:  text/plain
      originalContentType:  application/json;charset=UTF-8
    content_type:   text/plain

Таким образом, content_type равен text/plain вместо application/json;charset=UTF-8.

Я пытался установить content-type в таких конфигурациях, как:

spring:
  cloud:
    stream:
      default:
        content-type: application/json
      bindings:
        my-channel:
          content-type: application/json
          destination: my-channel-rs
          producer:
            exchange-type: direct
            max-length: 1000

но не помогло.

У меня такое ощущение, что в правильном ответе должен существовать один тип содержимого заголовка со значением «application/json».

Но может я ошибаюсь? Кто-нибудь может объяснить вышеуказанное поведение?


person Ziemowit Stolarczyk    schedule 28.11.2017    source источник


Ответы (2)


Похоже, вы используете версию 1.3 S-C-Stream. Не могли бы вы подтвердить? Мы, конечно, можем посмотреть. Кроме того, FWIW, вся проблема «originalContentType» не является проблемой, если у вас есть потребитель, который является приложением SCSt (поскольку оно будет сброшено до того, что вы ожидаете), но я предполагаю, что это не так, правильно?

Кроме того, есть шанс, что вы сможете обновиться до 2.0.0.M3. Разрешение contentType было значительно улучшено.

person Oleg Zhurakousky    schedule 28.11.2017
comment
originalContentType: application/json;charset=UTF-8 — биндер Rabbit не предназначен для связи с произвольными приложениями rabbitmq. Используйте для этой цели раковину rabbit. - person Gary Russell; 28.11.2017
comment
1. Да, это 1-й случай, когда мой потребитель не базируется на s-c-stream :) Это совсем другая технология, разработанная кем-то другим. 2. Версия spring-cloud-stream Chelsea.SR2 (spring cloud dependencies = Dalston.SR4). 3. Обновить до 2.0.0.M3? Приложение работает на производстве. Я бы предпочел дождаться официального выпуска весенней загрузки 2 с прикрепленным весенним облаком. - person Ziemowit Stolarczyk; 28.11.2017
comment
@GaryRussell, вы говорите, что я не могу использовать spring-cloud-stream в качестве производителя сообщений для потребителей, которые не основаны на spring-cloud-stream? Что вы имеете в виду под Rabbit Sink? - person Ziemowit Stolarczyk; 28.11.2017
comment
Да; это то, что я говорю (по крайней мере, до 2.0). приемник Rabbit — это приложение Spring-Cloud-Stream, которое получает сообщения. из (любого) связующего Spring Cloud Stream и публикует сообщения в rabbitmq. - person Gary Russell; 28.11.2017

У меня была аналогичная проблема. Мне нужно, чтобы базовый spring-amqp использовал заголовок «content-type» для установки фактического типа контента. Spring-amqp определяет это, проверяя класс полезной нагрузки сообщения независимо от заголовка «content-type».

Я создал запрос на вытягивание, который может быть принят или не принят: https://github.com/spring-projects/spring-amqp/pull/763/commits/25e4f9adf523a802ac5f26dd373eff8bb764fb49

person Jose San Leandro    schedule 09.06.2018