标签:整合 systemctl component gateway Fix commons 3.3 本机 exception
内容
SpringBoot整合SpringCloud的Eureka、Zuul等组件,快速实现简单易懂且具有服务熔断、负载均衡的分布式架构1.0,体验微服务的魅力。
版本
IDE:IDEA 2017.2.2 x64
JDK:1.8.0_171
manve:3.3.3
SpringBoot:1.5.9.RELEASE
SpringCloud:Dalston.SR1
适合人群
?Java开发人员
说明
转载请说明出处:SpringCloud从入门到进阶(三)——路由接入Zuul
参考
SpringCloud从入门到进阶(二)——注册中心Eureka
步骤
<?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">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.leo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gateway-service-7081-7082</artifactId>
?
<dependencies>
<!--zuul组件实现网关的路由转发和负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--actuator监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<!-- Spring Boot的Maven插件,使用Maven插件的方式来启动Spring Boot工程
如果不添加该插件在使用mvn命令打包的jar有问题,执行时会报错:xxx.jar中没有主清单属性-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
? 本示例暂不配置Zuul的高可用,peer2的配置注释掉。
spring:
application:
name: application-gatewayservice
profiles:
active: peer1
?
#Zuul的配置
zuul:
prefix: /jms #通过zuul.prefix的配置,所有请求统一增加前缀,可以实现API接口的版本号控制,注意前缀要加/
#如果某服务存在多个实例,Zuul结合Ribbon会做负载均衡,将请求均分的部分路由到不同的服务实例。
routes:
culturalService: #此处的名称是用户自定义的,需要指定它的path和serviceld,两者配合使用,就可以将指定类型的请求Uri路由到指定的Serviceld
path: /cultural/** #以/cultural/** 开头的请求都转发给springcloud-culturalService
serviceId: application-culturalService #此处是spring的applicationname,即Eureka的服务名,而非instance-id 实例名。
idleTimeService:
path: /idleTime/**
serviceId: application-idleTimeService
idleGoodService:
path: /idleGood/**
serviceId: application-idleGoodService
topicService:
path: /topic/**
serviceId: application-topicService
publicWelfareService:
path: /publicWelfare/**
serviceId: application-publicWelfareService
commonService:
path: /common/**
serviceId: application-commonService
#指明日志存放位置
logging:
file: logs/application-gatewayservice-${server.port}.logs
?
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
---
spring:
profiles: peer1
server:
port: 7081
?
?
eureka:
instance:
instance-id: springcloud-gatewayservice-7081
?
management:
port: 7181
security:
enabled: false
#---
#spring:
# profiles: peer2
#server:
# port: 7082
#
#management:
# port: 7182
# security:
# enabled: false
#
#eureka:
# instance:
# instance-id: springcloud-gatewayservice-7082
@EnableZuulProxy //开启Zuul的功能
@SpringBootApplication
@EnableEurekaClient
public class GatewayServiceApplicaton {
public static void main(String[] args) {
SpringApplication.run(GatewayServiceApplicaton.class,args);
}
}
<!-- 加载日志文件 -->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator/>
</configuration>
@Component
public class MyFallbackProvider implements ZuulFallbackProvider {
?
/**
* getRoute()方法,用于指定熔断功能应用于哪些路由的服务。
* 如果需要所有的路由服务都加熔断功能,只需要在getRoute()方法上返回"*"的匹配符,
*/
@Override
public String getRoute() {
return "*"; //所有路由服务都增加熔断。
}
?
/**
* fallbackResponse()为进入熔断功能时执行的逻辑
*/
@Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.SERVICE_UNAVAILABLE;
}
?
@Override
public int getRawStatusCode() throws IOException {
return 503;
}
?
@Override
public String getStatusText() throws IOException {
return "Service_Fallbcak";
}
?
@Override
public void close() {
?
}
?
@Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream("您好,服务出现故障,请重试。".getBytes("utf-8"));
}
?
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
return headers;
}
};
}
}
在命令行工具中进入项目pom文件所在路径,然后执行mvn clean package打包。
过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka
使用Bitvise SFTP或WinSCP等工具将jar包上传到有公网的服务器,再使用scp命令将jar包拷贝到路由接入服务器普通用户的~/jars路径下。
过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka
将内部域名eureka7001.com、eureka7002.com、eureka7003.com绑定到局域网IP 172.26.125.118,将gateway7081.com绑定到局域网IP 172.26.125.117。并将微服务的主机名绑定到对应的局域网IP(不加会出现无法路由的问题,详见第4节)。
? 修改/etc/hosts,添加hostname对应的ip地址
#IP 域名 别名
[jms@iz8vb62snc6e5cage5yvzcz jars]$ sudo vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.26.125.118 eureka7001.com
172.26.125.118 eureka7002.com
172.26.125.118 eureka7003.com
127.0.0.1 gateway7081.com
#不加会出现无法路由的问题,详见系列文章第(四)节
172.26.125.113 iz8vb6a56ld0vy6vuaijriz
172.26.125.111 iz8vb6a56ld0vy6vuaijrjz
重启网卡
[jms@iz8vb62snc6e5cage5yvzcz jars]$ sudo /etc/rc.d/init.d/network restart
Restarting network (via systemctl): [ OK ]
进行ping测试
[jms@iz8vb62snc6e5cage5yvzcz jars]$ ping eureka7001.com
PING eureka7001.com (172.26.125.118) 56(84) bytes of data.
64 bytes from eureka7001.com (172.26.125.118): icmp_seq=1 ttl=64 time=0.143 ms
64 bytes from eureka7001.com (172.26.125.118): icmp_seq=2 ttl=64 time=0.149 ms
[jms@iz8vb62snc6e5cage5yvzcz jars]$ ping gateway7081.com
PING gateway7081.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.023 ms
#可见访问本机和访问局域网的网络延迟差1个数量级。
[jms@iz8vb62snc6e5cage5yvzcz jars]$ java -jar gateway-service-7081-7082-1.0-SNAPSHOT.jar --spring.profiles.active=peer1 &
访问eureka服务器
使用postman请求API,由于微服务还未部署,因此请求对应接口会报503错误(服务熔断)。
关闭java程序请参考:Linux入门实践笔记(二)--Jar包运行与关闭
SpringCloud从入门到进阶(三)——路由接入Zuul
标签:整合 systemctl component gateway Fix commons 3.3 本机 exception
原文地址:https://www.cnblogs.com/lonelyJay/p/9842061.html