Некоторые недавние проблемы с использованием Nacos

Java

Недавно новый продукт использует 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>

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