Шина сообщений Spring-xd redis удаляет заголовки из сообщения

Я использую Redis в качестве хранилища сообщений для распределенной среды spring-xd.

Я устанавливаю заголовок сообщения, как показано ниже,

oufinalTreeMapsg1 = MessageBuilder.withPayload(treeMap).setHeader("columnNames", columnNames).build();

при проверке сообщения, полученного в процессоре, он показывает только идентификатор и отметку времени

Заголовки при отправке

[Headers={columnNames=abc,def, id=74acf995-ec39-0e1c-a426-c9e27b1d47d6, timestamp=1406784568493}]

Заголовки получены

[Headers={id=aed8dc5b-5b24-d444-7583-c2da7a21d31c, timestamp=1406784568495}]

здесь идентификатор и метка времени разные, но полезная нагрузка одинаковая.

Помогите, пожалуйста, с решением этой проблемы,

Заранее спасибо, -Суйодха


person Madhu Mohan Kommu    schedule 01.08.2014    source источник


Ответы (1)


Шина сообщений Redis по умолчанию не поддерживает передачу пользовательских заголовков; однако вы можете добавить пользовательские заголовки к переданным, добавив список с разделителями-запятыми в третий <constructor-arg/> в redis-bus.xml (в банке xd-dirt). Например...

<constructor-arg value="foo, bar" />

...пройдут заголовки foo и bar.

Однако даже в этом случае можно передавать только простые строковые значения.

В Spring Integration (используется шиной) сообщения неизменяемы; когда они передаются через какой-либо носитель (например, шину сообщений Redis), создается новое сообщение с содержимым, но эти заголовки (идентификатор и отметка времени) меняются.

RabbitMessageBus по умолчанию пропускает все пользовательские заголовки.

ОБНОВЛЕНИЕ

Redis и kafka не имеют концепции заголовков или свойств сообщений.

Реализации шины сообщений Redis и Kafka теперь поддерживают свойства в server.yml для добавления пользовательских заголовков к тем, которые передаются по шине.

По умолчанию транспортируются только некоторые заголовки системного уровня.

См. headers: в servers.yml в Redis (и Kafka) в разделе «Конфигурация приложения».

разделенный запятыми список дополнительных (со строковым значением) имен заголовков для переноса

Обратите внимание, что this (для Redis) неправильно говорит, что они должны иметь строковое значение. Изначально это было так, но теперь любой объект, который можно преобразовать в/из json, может быть в значении заголовка.

Кроме того, у kafka есть режим raw, и в этом случае заголовки вообще не передаются по шине; это может быть желательно по соображениям производительности, но некоторые вещи (например, преобразование типа сообщения) не могут поддерживаться в этом режиме, потому что инфраструктура не может определить тип.

person Gary Russell    schedule 01.08.2014
comment
Сохраняются ли заголовки сообщений при использовании KafkaMessageBus? - person FGreg; 05.12.2015
comment
Пожалуйста, смотрите мое редактирование; теперь вы можете настроить (в server.yml) дополнительные заголовки, которые могут передаваться шинами redis и kafka. - person Gary Russell; 05.12.2015