Commit 6d9c3d41 by Nepxion

整合Actuator和Swagger

parent 7c195f92
......@@ -14,8 +14,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.client.RestTemplate;
import com.nepxion.discovery.plugin.admincenter.endpoint.ConfigEndpoint;
import com.nepxion.discovery.plugin.admincenter.endpoint.RouterEndpoint;
import com.nepxion.discovery.plugin.admincenter.endpoint.VersionEndpoint;
@Configuration
......@@ -32,5 +34,15 @@ public class AdminAutoConfiguration {
public VersionEndpoint versionEndpoint() {
return new VersionEndpoint();
}
@Bean
public RouterEndpoint routerEndpoint() {
return new RouterEndpoint();
}
@Bean
public RestTemplate routerRestTemplate() {
return new RestTemplate();
}
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.routercenter.controller;
package com.nepxion.discovery.plugin.admincenter.endpoint;
/**
* <p>Title: Nepxion Discovery</p>
......@@ -21,13 +21,18 @@ import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
......@@ -41,7 +46,8 @@ import com.nepxion.discovery.plugin.framework.exception.PluginException;
@RestController
@Api(tags = { "路由接口" })
public class RouterController {
@ManagedResource(description = "Router Endpoint")
public class RouterEndpoint implements MvcEndpoint {
@Autowired
private PluginContainerInitializedHandler pluginContainerInitializedHandler;
......@@ -60,38 +66,50 @@ public class RouterController {
@Autowired
private Registration registration;
@RequestMapping(path = "/services", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心所有服务列表", notes = "", response = List.class, httpMethod = "GET")
@RequestMapping(path = "/router/services", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心服务列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<String> services() {
return getServices();
}
@RequestMapping(path = "/instances/{serviceId}", method = RequestMethod.GET)
@RequestMapping(path = "/router/instances/{serviceId}", method = RequestMethod.GET)
@ApiOperation(value = "获取本地节点可访问其他节点(根据服务名)的实例列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<ServiceInstance> instances(@PathVariable(value = "serviceId") @ApiParam(value = "目标服务名", required = true) String serviceId) {
return getInstanceList(serviceId);
}
@RequestMapping(path = "/info", method = RequestMethod.GET)
@RequestMapping(path = "/router/info", method = RequestMethod.GET)
@ApiOperation(value = "获取本地节点信息", notes = "获取当前节点的简单信息", response = RouterEntity.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public RouterEntity info() {
return getRouterEntity();
}
@RequestMapping(path = "/route/{routeServiceId}", method = RequestMethod.GET)
@RequestMapping(path = "/router/route/{routeServiceId}", method = RequestMethod.GET)
@ApiOperation(value = "获取本地节点可访问其他节点(根据服务名)的路由信息列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<RouterEntity> route(@PathVariable(value = "routeServiceId") @ApiParam(value = "目标服务名", required = true) String routeServiceId) {
return getRouterEntityList(routeServiceId);
}
@RequestMapping(path = "/route/{routeServiceId}/{routeHost}/{routePort}", method = RequestMethod.GET)
@RequestMapping(path = "/router/route/{routeServiceId}/{routeHost}/{routePort}", method = RequestMethod.GET)
@ApiOperation(value = "获取指定节点(根据IP和端口)可访问其他节点(根据服务名)的路由信息列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<RouterEntity> route(@PathVariable(value = "routeServiceId") @ApiParam(value = "目标服务名", required = true) String routeServiceId, @PathVariable(value = "routeHost") @ApiParam(value = "目标服务所在机器的IP地址", required = true) String routeHost, @PathVariable(value = "routePort") @ApiParam(value = "目标服务所在机器的端口号", required = true) int routePort) {
return getRouterEntityList(routeServiceId, routeHost, routePort);
}
@RequestMapping(path = "/routes", method = RequestMethod.POST)
@RequestMapping(path = "/router/routes", method = RequestMethod.POST)
@ApiOperation(value = "获取全路径的路由信息树", notes = "参数按调用服务名的前后次序排列,起始节点的服务名不能加上去。如果多个用“;”分隔,不允许出现空格", response = RouterEntity.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public RouterEntity routes(@RequestBody @ApiParam(value = "例如:service-a;service-b", required = true) String routeServiceIds) {
return routeTree(routeServiceIds);
}
......@@ -155,7 +173,7 @@ public class RouterController {
@SuppressWarnings("unchecked")
public List<RouterEntity> getRouterEntityList(String routeServiceId, String routeHost, int routePort) {
String url = "http://" + routeHost + ":" + routePort + "/" + PluginConstant.INSTANCES + "/" + routeServiceId;
String url = "http://" + routeHost + ":" + routePort + "/router/instances/" + routeServiceId;
List<Map<String, ?>> instanceList = null;
try {
......@@ -251,4 +269,19 @@ public class RouterController {
return routerEntityList;
}
@Override
public String getPath() {
return "/";
}
@Override
public boolean isSensitive() {
return true;
}
@Override
public Class<? extends Endpoint<?>> getEndpointType() {
return null;
}
}
\ No newline at end of file
......@@ -21,7 +21,6 @@ public class PluginConstant {
public static final String METADATA = "metadata";
public static final String HOST = "host";
public static final String PORT = "port";
public static final String INSTANCES = "instances";
public static final String RULE = "rule";
public static final String REACH_MAX_LIMITED_COUNT = "reach max limited count";
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<artifactId>discovery-plugin-router-center</artifactId>
<name>Nepxion Discovery Plugin Router Center</name>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<description>Nepxion Discovery is an enhancement for Spring Cloud Discovery</description>
<url>http://www.nepxion.com</url>
<parent>
<groupId>com.nepxion</groupId>
<artifactId>discovery</artifactId>
<version>3.3.11</version>
</parent>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-framework</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.nepxion.discovery.plugin.routercenter.configuration;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.client.RestTemplate;
@Configuration
@ComponentScan(basePackages = { "com.nepxion.discovery.plugin.routercenter.controller" })
@Import(SwaggerConfiguration.class)
public class RouterAutoConfiguration {
@Bean
public RestTemplate routerRestTemplate() {
return new RestTemplate();
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.routercenter.configuration;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration extends WebMvcConfigurerAdapter {
@Value("${spring.application.name}")
private String serviceName;
@Value("${swagger.service.base.package}")
private String basePackage;
@Value("${swagger.service.description}")
private String description;
@Value("${swagger.service.version}")
private String version;
@Value("${swagger.service.license}")
private String license;
@Value("${swagger.service.license.url}")
private String licenseUrl;
@Value("${swagger.service.contact.name}")
private String contactName;
@Value("${swagger.service.contact.url}")
private String contactUrl;
@Value("${swagger.service.contact.email}")
private String contactEmail;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(basePackage)) // 扫描该包下的所有需要在Swagger中展示的API,@ApiIgnore注解标注的除外
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(serviceName)
.description(description)
.version(version)
.license(license)
.licenseUrl(licenseUrl)
.contact(new Contact(contactName, contactUrl, contactEmail))
.build();
}
// 解决跨域问题
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*");
}
}
\ No newline at end of file
......@@ -27,11 +27,6 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-router-center</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-framework-consul</artifactId>
</dependency>
</dependencies>
......
......@@ -5,5 +5,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nepxion.discovery.plugin.framework.configuration.PluginAutoConfiguration,\
com.nepxion.discovery.plugin.framework.configuration.ConsulAutoConfiguration,\
com.nepxion.discovery.plugin.configcenter.configuration.ConfigAutoConfiguration,\
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration,\
com.nepxion.discovery.plugin.routercenter.configuration.RouterAutoConfiguration
\ No newline at end of file
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration
\ No newline at end of file
......@@ -27,11 +27,6 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-router-center</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-framework-eureka</artifactId>
</dependency>
</dependencies>
......
......@@ -5,5 +5,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nepxion.discovery.plugin.framework.configuration.PluginAutoConfiguration,\
com.nepxion.discovery.plugin.framework.configuration.EurekaAutoConfiguration,\
com.nepxion.discovery.plugin.configcenter.configuration.ConfigAutoConfiguration,\
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration,\
com.nepxion.discovery.plugin.routercenter.configuration.RouterAutoConfiguration
\ No newline at end of file
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration
\ No newline at end of file
......@@ -27,11 +27,6 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-router-center</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-framework-zookeeper</artifactId>
</dependency>
</dependencies>
......
......@@ -5,5 +5,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nepxion.discovery.plugin.framework.configuration.PluginAutoConfiguration,\
com.nepxion.discovery.plugin.framework.configuration.ZookeeperAutoConfiguration,\
com.nepxion.discovery.plugin.configcenter.configuration.ConfigAutoConfiguration,\
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration,\
com.nepxion.discovery.plugin.routercenter.configuration.RouterAutoConfiguration
\ No newline at end of file
com.nepxion.discovery.plugin.admincenter.configuration.AdminAutoConfiguration
\ No newline at end of file
......@@ -34,8 +34,8 @@ spring.application.discovery.control.enabled=true
spring.application.discovery.remote.config.enabled=true
# Swagger config
swagger.service.base.package=com.nepxion.discovery.plugin.routercenter.controller
swagger.service.description=Router Restful APIs
swagger.service.base.package=com.nepxion.discovery.plugin.admincenter.endpoint
swagger.service.description=Admin Center Restful APIs
swagger.service.version=1.0.0
swagger.service.license=Apache License 2.0
swagger.service.license.url=http://www.apache.org/licenses/LICENSE-2.0
......
......@@ -17,7 +17,6 @@
<module>discovery-plugin-framework-zookeeper</module>
<module>discovery-plugin-config-center</module>
<module>discovery-plugin-admin-center</module>
<module>discovery-plugin-router-center</module>
<module>discovery-console</module>
<module>discovery-plugin-starter-eureka</module>
<module>discovery-plugin-starter-consul</module>
......@@ -87,12 +86,6 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-plugin-router-center</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-console</artifactId>
<version>${project.version}</version>
</dependency>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment