GatewayRouteService.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.yaozhitech.spring5.service.impl;
  2. import java.io.IOException;
  3. import java.net.URI;
  4. import java.util.List;
  5. import org.springframework.cloud.gateway.route.RouteDefinition;
  6. import org.springframework.data.redis.core.RedisTemplate;
  7. import org.springframework.stereotype.Service;
  8. import com.fasterxml.jackson.core.type.TypeReference;
  9. import com.fasterxml.jackson.databind.ObjectMapper;
  10. import com.yaozhitech.spring5.form.FilterDefinition;
  11. import com.yaozhitech.spring5.form.GatewayRoute;
  12. import com.yaozhitech.spring5.form.PredicateDefinition;
  13. import lombok.extern.slf4j.Slf4j;
  14. @Service
  15. @Slf4j
  16. public class GatewayRouteService {
  17. private static final String GATEWAY_ROUTES = "gateway_routes::";
  18. private RedisTemplate redisTemplate;
  19. // @CreateCache(name = GATEWAY_ROUTES, cacheType = CacheType.REMOTE)
  20. // private Cache<String, RouteDefinition> gatewayRouteCache;
  21. //
  22. // @Autowired
  23. // private EventSender eventSender;
  24. public boolean add(GatewayRoute gatewayRoute) {
  25. // boolean isSuccess = this.save(gatewayRoute);
  26. // 转化为gateway需要的类型,缓存到redis, 并事件通知各网关应用
  27. RouteDefinition routeDefinition = gatewayRouteToRouteDefinition(gatewayRoute);
  28. redisTemplate.opsForValue().set(gatewayRoute.getRouteId(), routeDefinition);
  29. // eventSender.send(BusConfig.ROUTING_KEY, routeDefinition);
  30. return true;
  31. }
  32. // public boolean delete(String id) {
  33. // GatewayRoute gatewayRoute = this.getById(id);
  34. // // 删除redis缓存, 并事件通知各网关应用
  35. // gatewayRouteCache.remove(gatewayRoute.getRouteId());
  36. // eventSender.send(BusConfig.ROUTING_KEY, gatewayRouteToRouteDefinition(gatewayRoute));
  37. // return this.removeById(id);
  38. // }
  39. //
  40. // public boolean update(GatewayRoute gatewayRoute) {
  41. // boolean isSuccess = this.updateById(gatewayRoute);
  42. // // 转化为gateway需要的类型,缓存到redis, 并事件通知各网关应用
  43. // RouteDefinition routeDefinition = gatewayRouteToRouteDefinition(gatewayRoute);
  44. // gatewayRouteCache.put(gatewayRoute.getRouteId(), routeDefinition);
  45. // eventSender.send(BusConfig.ROUTING_KEY, routeDefinition);
  46. // return isSuccess;
  47. // }
  48. //
  49. /**
  50. * 将数据库中json对象转换为网关需要的RouteDefinition对象
  51. *
  52. * @param gatewayRoute
  53. * @return RouteDefinition
  54. */
  55. private RouteDefinition gatewayRouteToRouteDefinition(GatewayRoute gatewayRoute) {
  56. RouteDefinition routeDefinition = new RouteDefinition();
  57. routeDefinition.setId(gatewayRoute.getRouteId());
  58. routeDefinition.setOrder(gatewayRoute.getOrders());
  59. routeDefinition.setUri(URI.create(gatewayRoute.getUri()));
  60. ObjectMapper objectMapper = new ObjectMapper();
  61. try {
  62. routeDefinition.setFilters(objectMapper.readValue(gatewayRoute.getFilters(), new TypeReference<List<FilterDefinition>>() {
  63. }));
  64. routeDefinition.setPredicates(objectMapper.readValue(gatewayRoute.getPredicates(), new TypeReference<List<PredicateDefinition>>() {
  65. }));
  66. } catch (IOException e) {
  67. log.error("网关路由对象转换失败", e);
  68. }
  69. return routeDefinition;
  70. }
  71. //
  72. // public GatewayRoute get(String id) {
  73. // return this.getById(id);
  74. // }
  75. }