123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package org.jeecg.loader;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
- import org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository;
- import org.springframework.cloud.gateway.route.RouteDefinition;
- import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
- import org.springframework.cloud.gateway.support.NotFoundException;
- import org.springframework.context.ApplicationEventPublisher;
- import org.springframework.context.ApplicationEventPublisherAware;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Service;
- import reactor.core.publisher.Mono;
- /**
- * 动态更新路由网关service
- * 1)实现一个Spring提供的事件推送接口ApplicationEventPublisherAware
- * 2)提供动态路由的基础方法,可通过获取bean操作该类的方法。该类提供新增路由、更新路由、删除路由,然后实现发布的功能。
- *
- * @author zyf
- */
- @Slf4j
- @Service
- public class DynamicRouteService implements ApplicationEventPublisherAware {
- @Autowired
- private RouteDefinitionWriter routeDefinitionWriter;
- @Autowired
- private InMemoryRouteDefinitionRepository repository;
- /**
- * 发布事件
- */
- private ApplicationEventPublisher publisher;
- @Override
- public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
- this.publisher = applicationEventPublisher;
- }
- /**
- * 删除路由
- *
- * @param id
- * @return
- */
- public synchronized void delete(String id) {
- try {
- repository.delete(Mono.just(id)).subscribe();
- this.publisher.publishEvent(new RefreshRoutesEvent(this));
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- /**
- * 更新路由
- *
- * @param definition
- * @return
- */
- public synchronized String update(RouteDefinition definition) {
- try {
- log.info("gateway update route {}", definition);
- delete(definition.getId());
- } catch (Exception e) {
- return "update fail,not find route routeId: " + definition.getId();
- }
- try {
- repository.save(Mono.just(definition)).subscribe();
- this.publisher.publishEvent(new RefreshRoutesEvent(this));
- return "success";
- } catch (Exception e) {
- return "update route fail";
- }
- }
- /**
- * 增加路由
- *
- * @param definition
- * @return
- */
- public synchronized String add(RouteDefinition definition) {
- log.info("gateway add route {}", definition);
- try {
- repository.save(Mono.just(definition)).subscribe();
- } catch (Exception e) {
- }
- return "success";
- }
- }
|