Как добавить условие даты в @StreamListener - PullRequest
0 голосов
/ 01 февраля 2019

Предполагается, что я могу отправлять сообщения через Kafka или RabbitMQ и использовать их с помощью @StreamListener.

Подшивки настроены для content-type = 'application / json', поэтому я думаю, что было бы возможно добавить условия для полезной нагрузки.

Мое требование - получать элементы только тогда, когда поледата раньше, чем сейчас ().Все остальные элементы будут использованы, когда это условие будет выполнено.

Пример, я ожидаю что-то вроде:

@StreamListener(value = INPUT, condition = "data.startDate > now()")
public void onMessage(@Payload Data data) { 
    // ...
}

Первая проблема - я получаю ошибку: EL1008E: Свойство или поле 'startDate' не может быть найдено для объекта типа 'byte []'- может быть, не публично или недействительно?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я думаю, что ответ находится в документации и соответствует ответу Олега

Это потому, что вы тестируете то, что еще не существует в ожидаемом вами состоянии.Это связано с тем, что полезная нагрузка сообщения еще не преобразована из проводного формата (byte []) в нужный тип.Другими словами, он еще не прошел процесс преобразования типов, описанный в главе 10 «Согласование типов контента».

Итак, если вы не используете выражение SPeL, которое оценивает необработанные данные (например, значениепервый байт в байтовом массиве), используйте выражения на основе заголовка сообщения (например, условие = "заголовки ['type'] == 'собака'").

0 голосов
/ 01 февраля 2019

Это правильно, поскольку полезная нагрузка не преобразуется ни в какой тип и существует в необработанном виде, равном byte[].Пожалуйста, смотрите этот раздел , в частности "Согласование типов контента в контексте условия" подраздел.

Однако для вашего случая вы можете просто изменить выражение на что-то вроде new String(payload)...., зная, что оно всегда byte[], прежде чем оно будет преобразовано

...