2016-08-25 2 views
0

Есть ли в любом случае, что я могу сгенерировать некоторые метаданные для добавления к службе при ее регистрации.генерация генерации метаданных весеннего облака

Мы переезжаем из Эврики в Консул, и мне нужно добавить значение UUID к зарегистрированным метаданным при запуске службы. Чтобы впоследствии я смог получить это значение метаданных, когда я получаю экземпляры службы по имени.

Некоторые фон: Мы использовали этот превосходный интерфейс интерфейса пользователя от https://github.com/VanRoy/spring-cloud-dashboard. Он настроен на использование модели Eureka для служб, в которых у вас есть приложение с именем. Каждое приложение будет иметь несколько экземпляров с идентификатором экземпляра.

Таким образом, с моделью эврики существует описание обслуживания уровня 2, тогда как модель весеннего облака является плоской, где n экземпляров, каждый из которых имеет служебный идентификатор.

Плоская модель не будет работать с пользовательским интерфейсом, на который я ссылался выше, поскольку нет различия между именем приложения и идентификатором экземпляра, который является весенней моделью, это то же самое.

Так что, если я создаю свой собственный экземпляр экземпляра и обрабатываю его через метаданные, тогда я могу сохранить некоторые из них, не переписывая ui.

ответ

1

См. documentation on metadata and tags в конюшне весеннего облака. Консул пока не поддерживает метаданные при обнаружении службы, но весеннее облако имеет абстракцию метаданных (просто карту строк). В тегах consul, созданных с использованием стиля key=value, анализируются в эту карту метаданных.

К примеру, в, application.yml:

spring: 
    cloud: 
    consul: 
     discovery: 
     tags: foo=bar, baz 

Приведенная выше конфигурация приведет к карте с Foo → бар и БАЗ → Baz.

+0

да, видел это. Я на самом деле хочу вводить значения через код вместо статически, как и у вас. Поэтому, если нет способа ввести их в качестве части регистрации услуги консулу, то я думаю, что это в значительной степени конец моих усилий :) Да? – EvilJinious1

+0

Нет, существует несколько способов: вы создаете «EnvironmentPostProcessor», который вводит свойство, вы также можете расширить «ConsulLifecycle». – spencergibb

+0

интересный. Я просто смотрел на код ConsulLifeccyle. Поэтому, если я его продюсирую, я добавляю metatdat (теги) к консулу, чтобы другие службы могли видеть их при регистрации сервиса? Я все равно попробую, но просто попрошу о clairification. Спасибо – EvilJinious1

0

Основываясь на ответе Спенсера, я добавил свой код EnvironmentPostProcessor в свой код.

Он работает, и я могу добавить тег метаданных, я хочу программно, но он является дополнением к элементу «tags: foo = bar, baz», поэтому он переопределяет это. Вероятно, я увижу путь вокруг него на следующий день или около того, но я хотел бы добавить то, что я сделал для других, которые смотрят на этот ответ и говорят, так что вы сделали?

первый добавить класс следующим образом:

@Slf4j 
public class MetaDataEnvProcessor implements EnvironmentPostProcessor, Ordered { 

    // Before ConfigFileApplicationListener 
    private int order = ConfigFileApplicationListener.DEFAULT_ORDER - 1; 

    private UUID instanceId = UUID.randomUUID(); 

    @Override 
    public int getOrder() { 
     return this.order; 
    } 

    @Override 
    public void postProcessEnvironment(ConfigurableEnvironment environment, 
             SpringApplication application) { 

     LinkedHashMap<String, Object> map = new LinkedHashMap<>(); 
     map.put("spring.cloud.consul.discovery.tags", "instanceId="+instanceId.toString()); 
     MapPropertySource propertySource = new MapPropertySource("springCloudConsulTags", map); 
     environment.getPropertySources().addLast(propertySource); 
    } 

} 

затем добавить spring.factories ресурсов/META-INF с EHT следующую строку, чтобы добавить этот процессор

org.springframework.boot.env.EnvironmentPostProcessor=com.example.consul.MetaDataEnvProcessor 

Это работает отлично, за исключением переопределение того, что находится в вашем файле application.yml для тегов

+0

Сначала вы можете прочитать значение из «Среда», а затем добавить новый, чтобы он не перезаписывался. – spencergibb

 Смежные вопросы

  • Нет связанных вопросов^_^