0325b328912419a3022c9b9ec08d0af53cac5b05.svn-base 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package org.jeecg.loader;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
  5. import org.springframework.cloud.gateway.route.InMemoryRouteDefinitionRepository;
  6. import org.springframework.cloud.gateway.route.RouteDefinition;
  7. import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
  8. import org.springframework.cloud.gateway.support.NotFoundException;
  9. import org.springframework.context.ApplicationEventPublisher;
  10. import org.springframework.context.ApplicationEventPublisherAware;
  11. import org.springframework.http.ResponseEntity;
  12. import org.springframework.stereotype.Service;
  13. import reactor.core.publisher.Mono;
  14. /**
  15. * 动态更新路由网关service
  16. * 1)实现一个Spring提供的事件推送接口ApplicationEventPublisherAware
  17. * 2)提供动态路由的基础方法,可通过获取bean操作该类的方法。该类提供新增路由、更新路由、删除路由,然后实现发布的功能。
  18. *
  19. * @author zyf
  20. */
  21. @Slf4j
  22. @Service
  23. public class DynamicRouteService implements ApplicationEventPublisherAware {
  24. @Autowired
  25. private RouteDefinitionWriter routeDefinitionWriter;
  26. @Autowired
  27. private InMemoryRouteDefinitionRepository repository;
  28. /**
  29. * 发布事件
  30. */
  31. private ApplicationEventPublisher publisher;
  32. @Override
  33. public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
  34. this.publisher = applicationEventPublisher;
  35. }
  36. /**
  37. * 删除路由
  38. *
  39. * @param id
  40. * @return
  41. */
  42. public synchronized void delete(String id) {
  43. try {
  44. repository.delete(Mono.just(id)).subscribe();
  45. this.publisher.publishEvent(new RefreshRoutesEvent(this));
  46. }catch (Exception e){
  47. e.printStackTrace();
  48. }
  49. }
  50. /**
  51. * 更新路由
  52. *
  53. * @param definition
  54. * @return
  55. */
  56. public synchronized String update(RouteDefinition definition) {
  57. try {
  58. log.info("gateway update route {}", definition);
  59. delete(definition.getId());
  60. } catch (Exception e) {
  61. return "update fail,not find route routeId: " + definition.getId();
  62. }
  63. try {
  64. repository.save(Mono.just(definition)).subscribe();
  65. this.publisher.publishEvent(new RefreshRoutesEvent(this));
  66. return "success";
  67. } catch (Exception e) {
  68. return "update route fail";
  69. }
  70. }
  71. /**
  72. * 增加路由
  73. *
  74. * @param definition
  75. * @return
  76. */
  77. public synchronized String add(RouteDefinition definition) {
  78. log.info("gateway add route {}", definition);
  79. try {
  80. repository.save(Mono.just(definition)).subscribe();
  81. } catch (Exception e) {
  82. }
  83. return "success";
  84. }
  85. }