提交 66efaa28 编写于 作者: M ManongJu

实现ZUUL网关

上级 6a233bf1
......@@ -42,3 +42,12 @@ nbdist/
/micro-a-service/mvnw
/micro-a-service/*.cmd
/micro-a-service/.mvn
/upload-service/mvnw
/upload-service/*.cmd
/upload-service/.mvn
/monitor/.mvn
/monitor/mvnw
/monitor/mvnw.cmd
/resource/mvnw
/resource/mvnw.cmd
/resource/.mvn
......@@ -3,11 +3,11 @@ package com.microservice.skeleton.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulServer;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulServer
@EnableZuulProxy
public class GatewayApplication {
public static void main(String[] args) {
......
package com.microservice.skeleton.gateway.fallback;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.microservice.skeleton.gateway.model.ErrorCode;
import com.microservice.skeleton.gateway.model.Msg;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by Mr.Yangxiufeng on 2017/12/26.
* Time:10:12
* ProjectName:Mirco-Service-Skeleton
*/
@Component
public class ServiceFallbackProvider implements FallbackProvider {
@Override
public ClientHttpResponse fallbackResponse(Throwable cause) {
cause.printStackTrace();
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
@Override
public int getRawStatusCode() throws IOException {
return getStatusCode().value();
}
@Override
public String getStatusText() throws IOException {
return getStatusCode().getReasonPhrase();
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
//响应体
Msg msg = new Msg();
msg.setCode(ErrorCode.MICRO_SERVICE_UNAVAILABLE);
msg.setMsg("微服务不可用,请稍后再试");
ObjectMapper objectMapper = new ObjectMapper();
String content = objectMapper.writeValueAsString(msg);
return new ByteArrayInputStream(content.getBytes());
}
@Override
public HttpHeaders getHeaders() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
return httpHeaders;
}
};
}
@Override
public String getRoute() {
//表明是为哪个微服务提供回退,"*"全部
return "*";
}
@Override
public ClientHttpResponse fallbackResponse() {
return null;
}
}
package com.microservice.skeleton.gateway.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* Created by Mr.Yangxiufeng on 2017/12/25.
* Time:15:39
* ProjectName:Mirco-Service-Skeleton
*/
public class AccessFilter extends ZuulFilter {
@Component
public class PreRequestFilter extends ZuulFilter {
private static final Logger LOG = LoggerFactory.getLogger(PreRequestFilter.class);
@Override
public String filterType() {
return null;
return "pre";
}
@Override
public int filterOrder() {
return 0;
return 0;//int值来定义过滤器的执行顺序,数值越小优先级越高
}
@Override
public boolean shouldFilter() {
return false;
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
LOG.info("send {} request to {}",request.getMethod(),request.getRequestURL().toString());
return null;
}
}
package com.microservice.skeleton.gateway.model;
/**
* Created by Mr.Yangxiufeng on 2017/12/26.
* Time:13:50
* ProjectName:Mirco-Service-Skeleton
*/
public class ErrorCode {
public static final int OK=200;
public static final int BAD_REQUEST=400;
public static final int UNAUTHORIZED = 401;
public static final int FORBIDDEN = 403;
public static final int NOT_FOUNT = 404;
public static final int MICRO_SERVICE_UNAVAILABLE = 40001;//微服务不可用
public static final int SERVER_ERROR=500;
public static final int BAD_GATEWAY = 502;
public static final int SERVICE_UNAVAILABLE=503;
}
package com.microservice.skeleton.gateway.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
/**
* Created by Mr.Yangxiufeng on 2017/12/26.
* Time:13:41
* ProjectName:Mirco-Service-Skeleton
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Msg<T> implements Serializable{
private static final long serialVersionUID = -1177183613782210351L;
private Integer code;
private String msg;
private T data;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return "Msg{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
package com.microservice.skeleton.gateway.util;
import java.io.*;
/**
* Created by Mr.Yangxiufeng on 2017/12/26.
* Time:14:03
* ProjectName:Mirco-Service-Skeleton
*/
public class ObjectByteUtil {
public static byte[] toByteArray(Object obj) {
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
bytes = bos.toByteArray();
oos.close();
bos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return bytes;
}
/**
* 数组转对象
*
* @param bytes
* @return
*/
public static Object toObject(byte[] bytes) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
ois.close();
bis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return obj;
}
}
......@@ -21,4 +21,4 @@ endpoints:
management:
security:
enabled: false
###actuator监控点 end####
\ No newline at end of file
###actuator监控点 end####
......@@ -44,18 +44,6 @@
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
......
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
\ No newline at end of file
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.microservice.skeleton</groupId>
<artifactId>Micro-Service-Skeleton-Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Micro-Service-Skeleton-Monitor</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>monitor</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.microservice.skeleton.monitor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MonitorApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorApplication.class, args);
}
}
package com.microservice.skeleton.monitor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MonitorApplicationTests {
@Test
public void contextLoads() {
}
}
......@@ -29,6 +29,8 @@
<module>micro-a-service</module>
<module>auth-center</module>
<module>resource</module>
<module>upload-service</module>
<module>monitor</module>
</modules>
<dependencies>
<dependency>
......
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
\ No newline at end of file
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.microservice.skeleton</groupId>
<artifactId>Micro-Service-Skeleton-Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>Micro-Service-Skeleton-upload</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>upload-service</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.microservice.skeleton.upload;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class UploadServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UploadServiceApplication.class, args);
}
}
package com.microservice.skeleton.upload.controller;
import org.springframework.stereotype.Controller;
/**
* Created by Mr.Yangxiufeng on 2017/12/25.
* Time:16:59
* ProjectName:Mirco-Service-Skeleton
*/
@Controller
public class FileUploadController {
}
spring:
application:
name: upload-service
http:
multipart:
max-file-size: 2000MB
max-request-size: 2500MB
server:
port: 9040
eureka:
instance:
prefer-ip-address: true #使用IP注册
instance-id: ${spring.cloud.client.ipAddress}:${server.port}
lease-renewal-interval-in-seconds: 5 ##为了能够快速删除
lease-expiration-duration-in-seconds: 10 ##为了能够快速删除
client:
service-url:
defaultZone: http://register1:9010/eureka/,http://register2:9011/eureka/
###actuator监控点 start####
endpoints:
health:
sensitive: false
enabled: true
##默认情况下很多端点是不允许访问的,会返回401:Unauthorized
management:
security:
enabled: false
###actuator监控点 end####
package com.microservice.skeleton.upload;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UploadServiceApplicationTests {
@Test
public void contextLoads() {
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册