Как я могу сопоставить входящие заголовки как String вместо byte [] в моем проекте Spring Cloud Stream?

У меня есть простой проект Spring Cloud Stream, использующий потоки Spring Integration DSL и связующее устройство Kafka. Все работает отлично, но значения заголовков сообщений, поступающие от Kafka, приходят как byte[].

Это означает, что мои параметры SI @Header должны быть типа byte[]. Это работает, но было бы неплохо иметь их как строки (все входящие заголовки, которые меня волнуют, являются значениями String).

Я настроил клиентов Kafka на использование StringSerializer / StringDeserializer. Я предполагаю, что мне также нужно каким-то образом сообщить Spring Kafka, какие заголовки отображать как строки и какую кодировку символов использовать.

Я явно что-то здесь упускаю. Какие-нибудь советы?


person Gabriel Bauman    schedule 26.10.2019    source источник


Ответы (1)


Задайте для свойства связывания headerMapperBeanName имя bean-компонента DefaultKafkaHeaderMapper.

spring.cloud.stream.kafka.binder.headerMapperBeanName

Имя bean-компонента KafkaHeaderMapper, используемого для сопоставления заголовков Spring-Messaging с заголовками Kafka и обратно. Используйте это, например, если вы хотите настроить доверенные пакеты в DefaultKafkaHeaderMapper, который использует десериализацию JSON для заголовков.

Затем вы можете указать, какие заголовки вы хотите сопоставить как строки с помощью сопоставителя:

/**
 * Set the headers to not perform any conversion on (except {@code String} to
 * {@code byte[]} for outbound). Inbound headers that match will be mapped as
 * {@code byte[]} unless the corresponding boolean in the map value is true,
 * in which case it will be mapped as a String.
 * @param rawMappedHeaders the header names to not convert and
 * @since 2.2.5
 * @see #setCharset(Charset)
 * @see #setMapAllStringsOut(boolean)
 */
public void setRawMappedHeaders(Map<String, Boolean> rawMappedHeaders) {
person Gary Russell    schedule 26.10.2019
comment
орфографическая ошибка в setRawMappedHaeaders - person Faizan; 15.07.2020
comment
эта орфографическая ошибка действительно какое-то время присутствовала в названии метода. С тех пор это исправлено. - person Gabriel Bauman; 12.01.2021