Постоянные маршруты Spring Cloud Gateway в базе данных - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время я использую проект весеннего облачного шлюза для создания простого шлюза API, планировалось сохранить маршрут в mongodb, а затем обновить его, чтобы новый маршрут был доступен.Я сделал что-то простое, как это, чтобы получить мой маршрут от Монго.

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder){
    List<CreateAPIRequest> apiRequestList = repository.findAll();
    RouteLocatorBuilder.Builder routeLocator = builder.routes();
    for (CreateAPIRequest request: apiRequestList) {
        routeLocator
        .route(r-> {
              r.path("/"+request.getProxy().getListenPath())
             .filters(f->f.stripPrefix(1))
             .uri(request.getProxy().getTargetUrl()) 
        });
    }
    return routeLocator.build();
}

Мне удалось создать новый маршрут в БД, но я не могу обновить на лету.

Мне нужно понять, как обновлять маршруты на лету.

Спасибо

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Можете ли вы использовать Консул для сохранения ваших определений маршрута вместо монго.Затем простой вызов POST для обновления привода перезагружает ваши определения маршрута на лету.

0 голосов
/ 24 июля 2018

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

@Component
public class GatewayRoutesRefresher implements ApplicationEventPublisherAware {

    ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        publisher = applicationEventPublisher;
    }

    public void refreshRoutes() {
        publisher.publishEvent(new RefreshRoutesEvent(this));
    }
}

Вот пример, показывающий, как использовать вышеуказанный компонент:

@Autowired
GatewayRoutesRefresher gatewayRoutesRefresher;
...
public void buildRoutes() {
    // build your routes basing on your db entries then refresh the routes in gateway
    ...
    gatewayRoutesRefresher.refreshRoutes();
}

Более полное представление о концепции можно найти вглядя на следующий код проекта: https://github.com/botorabi/HomieCenter

0 голосов
/ 12 июня 2018

Я быстро пошел на репо и открытые выпуски.

И, похоже, на данный момент единственный способ обновить маршруты - через Actuator через:

/actuator/gateway/refresh

Вы можетепроверьте обсуждение здесь: https://github.com/spring-cloud/spring-cloud-gateway/issues/43

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...