Переопределите список серверов ленты, чтобы получить список имен хостов от консула - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь переопределить список серверов ленты, чтобы получить список имен хостов у консула.У меня есть консул, работающий должным образом (при тестировании со значениями жесткого кода), чтобы получить имя хоста и порт для службы.Проблема у меня возникает, когда я пытаюсь выполнить автоматическое подключение в IClientConfig.Я получаю исключение, что bean-компонент IClientConfig не может быть найден.Как переопределить конфигурации ленты и автоматически связать IClientConfig с помощью метода ribbonServerList.

Я попытался выполнить приведенные здесь инструкции на http://projects.spring.io/spring-cloud/spring-cloud.html#_customizing_the_ribbon_client, чтобы настроить клиентскую конфигурацию ленты.Я продолжаю получать следующую ошибку: Описание: Параметр 0 метода ribbonServerList в com.intradiem.enterprise.keycloak.config.ConsulRibbonSSLConfig требует bean-компонент типа 'com.netflix.client.config.IClientConfig', который не может быть найден.Что приводит к сбою пружинной загрузки.Ниже приведены классы, которые я пытаюсь использовать для создания класса автоконфигурации:

@Configuration
@EnableConfigurationProperties
@ConditionalOnBean(SpringClientFactory.class)
@ConditionalOnProperty(value = "spring.cloud.com.intradiem.service.apirouter.consul.ribbon.enabled", matchIfMissing = true)
@AutoConfigureAfter(RibbonAutoConfiguration.class)
@RibbonClients(defaultConfiguration = ConsulRibbonSSLConfig.class)
//@RibbonClient(name = "question-answer-provider", configuration = ConsulRibbonSSLConfig.class)
public class ConsulRibbonSSLAutoConfig
{
}

Класс конфигурации:

@Component
public class ConsulRibbonSSLConfig
{
@Autowired
private ConsulClient client;

private String serviceId = "client";

public ConsulRibbonSSLConfig() {
}

public ConsulRibbonSSLConfig(String serviceId) {
    this.serviceId = serviceId;
}

@Bean
@ConditionalOnMissingBean
public ServerList<?> ribbonServerList(IClientConfig clientConfig) {
    ConsulSSLServerList serverList = new ConsulSSLServerList(client);
    serverList.initWithNiwsConfig(clientConfig);
    return serverList;
}
}

ServerList Code:

public class ConsulSSLServerList extends AbstractServerList<Server>
{
private final ConsulClient client;

private String serviceId = "client";

public ConsulSSLServerList(ConsulClient client) {
    this.client = client;
}

@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
    this.serviceId = clientConfig.getClientName();
}

@Override
public List<Server> getInitialListOfServers() {
    return getServers();
}

@Override
public List<Server> getUpdatedListOfServers() {
    return getServers();
}

private List<Server> getServers() {
    List<Server> servers = new ArrayList<>();
    Response<QueryExecution> results = client.executePreparedQuery(serviceId, QueryParams.DEFAULT);
    List<QueryNode> nodes = results.getValue().getNodes();
    for (QueryNode queryNode : nodes) {
        QueryNode.Node node = queryNode.getNode();
        servers.add(new Server(node.getMeta().containsKey("secure") ? "https" : "http", node.getNode(), queryNode.getService().getPort()));
    }
    return servers;
}

@Override
public String toString() {
    final StringBuilder sb = new StringBuilder("ConsulSSLServerList{");
    sb.append("serviceId='").append(serviceId).append('\'');
    sb.append('}');
    return sb.toString();
}
}
...