Explorar el Código

update message-service RouteService

reghao hace 3 meses
padre
commit
981b5c6305

+ 18 - 0
message/message-service/src/main/java/cn/reghao/tnb/message/app/config/AppProperties.java

@@ -0,0 +1,18 @@
+package cn.reghao.tnb.message.app.config;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author reghao
+ * @date 2021-12-30 11:01:46
+ */
+@Configuration
+@ConfigurationProperties(prefix = "app")
+@Setter
+@Getter
+public class AppProperties {
+    private String gatewayAdminUrl;
+}

+ 0 - 83
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/model/route/FilterDefinition.java

@@ -1,83 +0,0 @@
-package cn.reghao.tnb.message.app.soa.model.route;
-
-import jakarta.validation.constraints.NotNull;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import static org.springframework.util.StringUtils.tokenizeToStringArray;
-
-/**
- * @author reghao
- * @date 2024-11-22 14:00:26
- */
-public class FilterDefinition {
-    @NotNull
-    private String name;
-
-    private Map<String, String> args = new LinkedHashMap<>();
-
-    public FilterDefinition() {
-    }
-
-    public FilterDefinition(String text) {
-        int eqIdx = text.indexOf('=');
-        if (eqIdx <= 0) {
-            setName(text);
-            return;
-        }
-        setName(text.substring(0, eqIdx));
-
-        String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), ",");
-
-        for (int i = 0; i < args.length; i++) {
-            this.args.put(NameUtils.generateName(i), args[i]);
-        }
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Map<String, String> getArgs() {
-        return args;
-    }
-
-    public void setArgs(Map<String, String> args) {
-        this.args = args;
-    }
-
-    public void addArg(String key, String value) {
-        this.args.put(key, value);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        FilterDefinition that = (FilterDefinition) o;
-        return Objects.equals(name, that.name) && Objects.equals(args, that.args);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(name, args);
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("FilterDefinition{");
-        sb.append("name='").append(name).append('\'');
-        sb.append(", args=").append(args);
-        sb.append('}');
-        return sb.toString();
-    }
-}

+ 0 - 51
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/model/route/NameUtils.java

@@ -1,51 +0,0 @@
-package cn.reghao.tnb.message.app.soa.model.route;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * @author reghao
- * @date 2024-11-22 14:01:40
- */
-public final class NameUtils {
-
-    private NameUtils() {
-        throw new AssertionError("Must not instantiate utility class.");
-    }
-
-    /**
-     * Generated name prefix.
-     */
-    public static final String GENERATED_NAME_PREFIX = "_genkey_";
-
-    private static final Pattern NAME_PATTERN = Pattern.compile("([A-Z][a-z0-9]+)");
-
-    public static String generateName(int i) {
-        return GENERATED_NAME_PREFIX + i;
-    }
-
-    public static String normalizeToCanonicalPropertyFormat(String name) {
-        Matcher matcher = NAME_PATTERN.matcher(name);
-        StringBuffer stringBuffer = new StringBuffer();
-        while (matcher.find()) {
-            if (stringBuffer.length() != 0) {
-                matcher.appendReplacement(stringBuffer,
-                        "-" + matcher.group(1).toLowerCase());
-            }
-            else {
-                matcher.appendReplacement(stringBuffer, matcher.group(1).toLowerCase());
-            }
-        }
-        return stringBuffer.toString();
-    }
-
-    private static String removeGarbage(String s) {
-        int garbageIdx = s.indexOf("$Mockito");
-        if (garbageIdx > 0) {
-            return s.substring(0, garbageIdx);
-        }
-
-        return s;
-    }
-
-}

+ 0 - 84
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/model/route/PredicateDefinition.java

@@ -1,84 +0,0 @@
-package cn.reghao.tnb.message.app.soa.model.route;
-
-import jakarta.validation.ValidationException;
-import jakarta.validation.constraints.NotNull;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import static org.springframework.util.StringUtils.tokenizeToStringArray;
-
-/**
- * @author reghao
- * @date 2024-11-22 14:00:34
- */
-public class PredicateDefinition {
-    @NotNull
-    private String name;
-
-    private Map<String, String> args = new LinkedHashMap<>();
-
-    public PredicateDefinition() {
-    }
-
-    public PredicateDefinition(String text) {
-        int eqIdx = text.indexOf('=');
-        if (eqIdx <= 0) {
-            throw new ValidationException("Unable to parse PredicateDefinition text '"
-                    + text + "'" + ", must be of the form name=value");
-        }
-        setName(text.substring(0, eqIdx));
-
-        String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), ",");
-
-        for (int i = 0; i < args.length; i++) {
-            this.args.put(NameUtils.generateName(i), args[i]);
-        }
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Map<String, String> getArgs() {
-        return args;
-    }
-
-    public void setArgs(Map<String, String> args) {
-        this.args = args;
-    }
-
-    public void addArg(String key, String value) {
-        this.args.put(key, value);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        PredicateDefinition that = (PredicateDefinition) o;
-        return Objects.equals(name, that.name) && Objects.equals(args, that.args);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(name, args);
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("PredicateDefinition{");
-        sb.append("name='").append(name).append('\'');
-        sb.append(", args=").append(args);
-        sb.append('}');
-        return sb.toString();
-    }
-}

+ 0 - 134
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/model/route/RouteDefinition.java

@@ -1,134 +0,0 @@
-package cn.reghao.tnb.message.app.soa.model.route;
-
-import jakarta.validation.Valid;
-import jakarta.validation.ValidationException;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import java.net.URI;
-import java.util.*;
-
-import static org.springframework.util.StringUtils.tokenizeToStringArray;
-
-/**
- * 取自 org.springframework.cloud.gateway.route
- *
- * @author reghao
- * @date 2024-11-22 14:00:15
- */
-public class RouteDefinition {
-
-    private String id;
-
-    @NotEmpty
-    @Valid
-    private List<PredicateDefinition> predicates = new ArrayList<>();
-
-    @Valid
-    private List<FilterDefinition> filters = new ArrayList<>();
-
-    @NotNull
-    private URI uri;
-
-    private Map<String, Object> metadata = new HashMap<>();
-
-    private int order = 0;
-
-    public RouteDefinition() {
-    }
-
-    public RouteDefinition(String text) {
-        int eqIdx = text.indexOf('=');
-        if (eqIdx <= 0) {
-            throw new ValidationException("Unable to parse RouteDefinition text '" + text
-                    + "'" + ", must be of the form name=value");
-        }
-
-        setId(text.substring(0, eqIdx));
-
-        String[] args = tokenizeToStringArray(text.substring(eqIdx + 1), ",");
-
-        setUri(URI.create(args[0]));
-
-        for (int i = 1; i < args.length; i++) {
-            this.predicates.add(new PredicateDefinition(args[i]));
-        }
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public List<PredicateDefinition> getPredicates() {
-        return predicates;
-    }
-
-    public void setPredicates(List<PredicateDefinition> predicates) {
-        this.predicates = predicates;
-    }
-
-    public List<FilterDefinition> getFilters() {
-        return filters;
-    }
-
-    public void setFilters(List<FilterDefinition> filters) {
-        this.filters = filters;
-    }
-
-    public URI getUri() {
-        return uri;
-    }
-
-    public void setUri(URI uri) {
-        this.uri = uri;
-    }
-
-    public int getOrder() {
-        return order;
-    }
-
-    public void setOrder(int order) {
-        this.order = order;
-    }
-
-    public Map<String, Object> getMetadata() {
-        return metadata;
-    }
-
-    public void setMetadata(Map<String, Object> metadata) {
-        this.metadata = metadata;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        RouteDefinition that = (RouteDefinition) o;
-        return this.order == that.order && Objects.equals(this.id, that.id)
-                && Objects.equals(this.predicates, that.predicates)
-                && Objects.equals(this.filters, that.filters)
-                && Objects.equals(this.uri, that.uri)
-                && Objects.equals(this.metadata, that.metadata);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(this.id, this.predicates, this.filters, this.uri,
-                this.metadata, this.order);
-    }
-
-    @Override
-    public String toString() {
-        return "RouteDefinition{" + "id='" + id + '\'' + ", predicates=" + predicates
-                + ", filters=" + filters + ", uri=" + uri + ", order=" + order
-                + ", metadata=" + metadata + '}';
-    }
-
-}

+ 2 - 7
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/model/vo/RouteDefinitionInfo.java

@@ -1,6 +1,6 @@
 package cn.reghao.tnb.message.app.soa.model.vo;
 
-import cn.reghao.tnb.message.app.soa.model.route.RouteDefinition;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -8,16 +8,11 @@ import lombok.Setter;
  * @author reghao
  * @date 2024-11-22 14:23:41
  */
+@AllArgsConstructor
 @Setter
 @Getter
 public class RouteDefinitionInfo {
     private String id;
     private String upstreamUrl;
     private String routeUrl;
-
-    public RouteDefinitionInfo(RouteDefinition routeDefinition) {
-        this.id = routeDefinition.getId();
-        this.upstreamUrl = routeDefinition.getUri().toString();
-        this.routeUrl = routeDefinition.getPredicates().get(0).getArgs().get("_genkey_0");
-    }
 }

+ 27 - 7
message/message-service/src/main/java/cn/reghao/tnb/message/app/soa/service/RouteService.java

@@ -1,16 +1,20 @@
 package cn.reghao.tnb.message.app.soa.service;
 
 import cn.reghao.jutil.jdk.http.WebClient;
+import cn.reghao.tnb.message.app.config.AppProperties;
 import cn.reghao.tnb.message.app.soa.model.dto.RouteAdd;
 import cn.reghao.tnb.message.app.soa.model.dto.RouteDelete;
-import cn.reghao.tnb.message.app.soa.model.route.RouteDefinition;
 import cn.reghao.tnb.message.app.soa.model.vo.RouteDefinitionInfo;
 import cn.reghao.jutil.jdk.http.WebRequest;
 import cn.reghao.jutil.jdk.http.WebResponse;
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -23,9 +27,10 @@ import java.util.stream.Collectors;
 @Service
 public class RouteService {
     private final WebRequest webRequest;
-    private final String host = "http://192.168.0.181:16000";
+    private final String host;
 
-    public RouteService() {
+    public RouteService(AppProperties appProperties) {
+        this.host = appProperties.getGatewayAdminUrl();
         this.webRequest = new WebClient();
     }
 
@@ -71,13 +76,28 @@ public class RouteService {
         String url = String.format("%s/routes", host);
         WebResponse webResponse = webRequest.get(url);
         String data = getWebResponse(webResponse);
+        List<RouteDefinitionInfo> list = new ArrayList<>();
         if (data != null) {
-            return JsonConverter.jsonToObjects(data, RouteDefinition.class).stream()
-                    .map(RouteDefinitionInfo::new)
-                    .collect(Collectors.toList());
+            JsonArray jsonArray = JsonConverter.jsonToJsonElement(data).getAsJsonArray();
+            for (JsonElement jsonElement : jsonArray) {
+                JsonObject jsonObject = jsonElement.getAsJsonObject();
+                String id = jsonObject.get("id").getAsString();
+                String uri = jsonObject.get("uri").getAsString();
+                String path = "";
+                JsonArray predicates = jsonObject.get("predicates").getAsJsonArray();
+                for (JsonElement predicate : predicates) {
+                    JsonObject predicateObject = predicate.getAsJsonObject();
+                    String name = predicateObject.get("name").getAsString();
+                    if ("Path".equals(name)) {
+                        JsonObject pathObject = predicateObject.get("args").getAsJsonObject();
+                        path = pathObject.get("_genkey_0").getAsString();
+                    }
+                }
+                list.add(new RouteDefinitionInfo(id, uri, path));
+            }
         }
 
-        return Collections.emptyList();
+        return list;
     }
 
     public RouteDefinitionInfo getRouteInfo(String routeId) {

+ 3 - 1
message/message-service/src/main/resources/application-cluster.yml

@@ -25,4 +25,6 @@ spring:
 eureka:
   client:
     service-url:
-      defaultZone: http://192.168.0.210:6060/eureka/
+      defaultZone: http://192.168.0.210:6060/eureka/
+app:
+  gatewayAdminUrl: http://192.168.0.181:16000

+ 3 - 1
message/message-service/src/main/resources/application-dev.yml

@@ -25,4 +25,6 @@ spring:
 eureka:
   client:
     service-url:
-      defaultZone: http://127.0.0.1:6060/eureka/
+      defaultZone: http://127.0.0.1:6060/eureka/
+app:
+  gatewayAdminUrl: http://localhost:16000

+ 3 - 1
message/message-service/src/main/resources/application-test.yml

@@ -25,4 +25,6 @@ spring:
 eureka:
   client:
     service-url:
-      defaultZone: http://192.168.0.210:6060/eureka/
+      defaultZone: http://192.168.0.210:6060/eureka/
+app:
+  gatewayAdminUrl: http://192.168.0.181:16000