Spring Boot Kafka слушатель обогащение наблюденияJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot Kafka слушатель обогащение наблюдения

Сообщение Anonymous »

У меня есть приложение для пружинного загрузки на основе Kafka (Micrometer + OTEL), которое потребляет множество событий из множества тем Kafka и публикует свои выводы на другом наборе тем Kafka. : < /p>

Изменить имя наблюдения < /li>
Добавить низкие и высокие значения кардинальности, которые можно извлечь самим сообщением kafka < /li>
Добавить некоторые специфические свойства бизнес -логики, которые были бы доступны позже, но и все, что нельзя сделать, но не все. Гордитесь решением: < /p>

Код: Выделить всё

@Slf4j
public class KafkaConsumerObservationConvention extends KafkaListenerObservation.DefaultKafkaListenerObservationConvention {

@Override
public boolean supportsContext(Observation.Context context) {
return super.supportsContext(context);
}

@Override
public String getName() {
return "consumeKafkaEvent";
}

@Override
public KeyValues getLowCardinalityKeyValues(KafkaRecordReceiverContext context) {
...
}
}
< /code>
Вышеупомянутое забота о требованиях 1 и 2, но не 3, так как наблюдается, что при создании наблюдения создается наблюдение, и у меня просто нет этих свойств в этот момент.@Autowired ObservationRegistry observationRegistry;

Optional.ofNullable(observationRegistry.getCurrentObservation())
.ifPresent(o->o.lowCardinalityKeyValue(
KeyValue.of("key", "value");
< /code>
Мне не нравится этот подход, потому что < /p>
Проблемы: < /p>

 Логика обогащения наблюдения теперь разбросана по всему применению. Любой, кто хочет добавить какую -то свойство, должен сделать эту вещь низкого уровня самостоятельно. Следовательно, наблюдение не является универсальным решением < /li>
 Из того, что я знаю, наблюдения также могут быть сложены, поэтому, если это что -то вроде obs1 -> obs2 -> obs3. Когда я делаю наблюдение зарегистрировано. GetCurrentObservation () 
это даст мне obs3 , но первоначальное наблюдение, созданное Kafkalistener, было Obs1. Таким образом, это представляет риск повреждения данных. в этом случае вызвано. Одна из возможных причин, по которой я мог бы подумать об этом, заключалась в том, что по дизайну или, как предполагается, есть ссылки на все OCS и наблюдения, и если я заставлю свой OC также зависим от OR или представляет риск циклической зависимости, и бобы могут быть не подключены должным образом. Что заставило меня отказаться от этого подхода, также думая, что это на самом деле может быть антипаттерн.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... enrichment

Вернуться в «JAVA»