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

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

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

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

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

1 Ответ

1 голос
/ 26 октября 2019

Установите для свойства связывания headerMapperBeanName имя бина DefaultKafkaHeaderMapper.

spring.cloud.stream.kafka.binder.headerMapperBeanName

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

Затем вы можете указать, какие заголовки вы хотите отобразить как Strings:маппер:

/**
 * 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 setRawMappedHaeaders(Map<String, Boolean> rawMappedHeaders) {
...