Конфигурация микропрофиля: динамические значения ConfigSource для тегов метрик отказоустойчивости.

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

Поэтому мы придумали обходной путь, установив значение ThreadLocal через Interceptor, которое затем считывается пользовательским ConfigSource. ConfigSource проверяет ключи конфигурации "mp.metrics.tags" и "MP_METRICS_TAGS" в своем методе getValue(final String propertyName). В основном это сработало бы, если бы getValue вызывался каждый раз при обработке аннотации отказоустойчивости. Но похоже, что это не так, и вызовы метода происходят случайным образом.

По моему мнению, ConfigSources и их getValue(final String propertyName) должны вызываться всегда, поскольку разработчик может полагаться на значения конфигурации, которые могут меняться каждую секунду.

Любые идеи, почему источник конфигурации не вызывается?


person sofarsoghood    schedule 02.12.2020    source источник


Ответы (2)


Похоже, что пользовательский ConfigSource больше не вызывается при многократном возврате null или, по крайней мере, на этапе запуска сервера. В упомянутом сценарии это можно обойти, вернув пустую строку. Затем ConfigSource также вызывается для каждого вызова метода getValue() во время выполнения.

person sofarsoghood    schedule 03.12.2020

В спецификации MicroProfile Config 1.4 указано, что кэширование значение ConfigSource должно иметь место, поэтому, если ваша реализация MicroProfile Config Config (вы не говорите, какая это реализация) кэширует результаты вызова ConfigSource#getValue(), она не соответствует требованиям, насколько я могу судить ( спецификация несовершенна, не очень строга, и ее TCK неоднородна, но, безусловно, в этом вопросе она кажется довольно ясной).

(Обратите внимание, что данная реализация ConfigSource может, конечно, принять решение о возврате кэшированных значений из своего метода getValue().)

person Laird Nelson    schedule 09.12.2020
comment
думаю, проблема в этом случае заключалась в метриках микропрофиля (или отказоустойчивости), которые сами кэшировали значения конфигурации. После нескольких попыток кажется, что источник конфигурации getValue вызывается случайным образом. Таким образом, внутри отказоустойчивости или структуры метрик может быть какая-то неуклюжая логика. - person sofarsoghood; 10.12.2020