Недавно новый продукт использует Nacos в качестве центра регистрации и настройки, и во время использования возникли небольшие проблемы, которые описаны здесь.
Используемая версия:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.2</version>
</dependency>
Конфигурация не обновлена
Например, мы указываем dataId через @NacosPropertySource в классе запуска, а затем настраиваем автоматическое обновление следующим образом:
@NacosPropertySource(dataId = "application", autoRefreshed = true, type = ConfigType.YAML)
Я не обращал особого внимания на конкретное использование и напрямую использовал @NacosValue для получения соответствующего содержимого конфигурации. Сначала я не заметил, что конфигурация была изменена в фоновом режиме, но это не повлияло на приложение. Позже это произошло из-за того, что мне нужно было изменить содержимое конфигурации, и я обнаружил, что это не повлияло после изменения. , поэтому я обнаружил эту проблему.
Решение также очень простое.Вы также можете установить autoRefreshed в значение true в @NacosValue.Значение по умолчанию — false. То есть должны быть настроены как @NacosPropertySource, так и @NacosValue.
Я лично считаю, что это не очень удобно.Большинство людей подумают, что параметр @NacosPropertySource должен быть таким, чтобы соответствующий dataId мог автоматически обновляться.Самое главное, что автоматическое обновление является центром конфигурации.самая основная функция, я не понимаю, почему он выключен по умолчанию, насколько дружелюбно включить его по умолчанию.
Кроме того, всем рекомендуется использовать @Value для внедрения конфигурации. Преимущество этого в том, что при переключении центра конфигурации на другой, например Apollo, код менять не нужно. Если используется @NacosValue, то у вас есть Изменил код.
Однако недостаток @Value заключается в том, что в настоящее время он не может динамически обновляться в Spring Boot. Он может полагаться только на @RefreshScope, но @RefreshScope находится в Spring Cloud. Если вы не используете Spring Cloud, это будет неловко. . .
В Apollo @Value поддерживает динамическое обновление, подобное и подобное.
логировать безумный вывод
Так как в модуле именования Nacos выводится очень много логов инфо-уровня, а в проекте тоже выставлен инфо-уровень, то следующие логи будут лихорадочно выводиться в это время.99% логов бесполезны и пустые диски. ..
com.alibaba.nacos.client.naming -227843770 [com.alibaba.nacos.client.naming.updater] INFO ....
Регулировка уровня журнала упоминается в документе Nacos, как показано ниже:
Если вы используете log4j, вы можете самостоятельно настроить соответствующий уровень конфигурации, например:
<logger name="com.alibaba.nacos.client.naming" additivity="false">
<level value="warn"/>
<appender-ref ref="FileAppender" />
<appender-ref ref="ConsoleAppender" />
</logger>
Вышеупомянутые две проблемы не являются функциональными проблемами, а проблемами, которые возникнут в процессе первоначального использования, поскольку они не очень знакомы.