@SpringCloud(Finchley.RELEASE版本)+SpringBoot(2.0.3.RELEASE)微服务框架搭建
由于项目需要,以及应对高并发建议搭建高可用注册中心,pow依赖以及配置文件如下:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-security
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
${project.name}
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
repackage
src/main/java
**/*.xml
src/main/resources
src/test/java
**/*.xml
src/test/resources
application.properties文件内容
#安全认证
spring.security.user.name=admin
spring.security.user.password=123
以下是application-peer1.properties文件内容
server.port=8000
spring.application.name=zy_eureka
eureka.instance.hostname=peer1
#维护实例,不需要去检索服务
#eureka.client.register-with-eureka=false
#不注册自己
eureka.client.fetch-registry=true
#eureka地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer2:8100/eureka/
#开启ip地址形式来定义注册中心的地址
#eureka.instance.prefer-ip-address=true
#开发阶段关闭服务的自我保护
#eureka.server.enable-self-preservation=false
以下是application-peer2.properties文件内容
server.port=8100
spring.application.name=zy_eureka
eureka.instance.hostname=peer2
#维护实例,不需要去检索服务
#eureka.client.register-with-eureka=false
#不注册自己
eureka.client.fetch-registry=true
#eureka地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer1:8000/eureka/
#开启ip地址形式来定义注册中心的地址
#eureka.instance.prefer-ip-address=true
#开发阶段关闭服务的自我保护
#eureka.server.enable-self-preservation=false
#注册中心的启动,通过命令行模式,首先项目打jar包,后打开cmd输入如下命令:
java -jar jar包名.jar --spring.profiles.active=peer1
java -jar jar包名.jar --spring.profiles.active=peer2
#注册中心启动后会互相注册
#网关是微服务中不可或缺的一部分,外部请求统一通过网关请求,通过验证,拦截处理后,通过zuul的router过滤器路由到不同的服务模块中去,来保护各服务的实例地址
网关的pom依赖如下:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-bus-amqp
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
${project.name}
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
repackage
src/main/java
**/*.xml
src/main/resources
src/test/java
**/*.xml
src/test/resources
以下是配置文件,由于网关的路由配置同步到springcloud的配置中心在F版本中还有问题(博主还未解决),所以没有添加bus(消息总线)和config(配置中心的依赖),如下是网关配置文件:
spring.application.name=zyzuul
#spring.cloud.config.label=master
#spring.cloud.config.profile=dev
#spring.cloud.config.uri=http://localhost:8881/
#为配置中心添加安全保护
#spring.cloud.config.username=user
#spring.cloud.config.password=123
#spring.cloud.bus.enabled=true
#spring.cloud.bus.trace.enabled=true
spring.rabbitmq.port=5672
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
server.port=8002
#配置路由地址
zuul.routes.zy_member.path=/zymember.**
#通过服务名,配置路由映射地址
zuul.routes.zy_member.url=zymember
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer1:8000/eureka/,http://admin:123@peer2:8100/eureka/
#保护cookie中的信息
zuul.routes..customSensitiveHeaders=true
#解决重定向问题,保护实例地址
zuul.addHostHeader=true
#该参数用来设置API网关中路由转发请求的HysstrixCommand执行超时时间(ms)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:6000
#路由转发请求,创建请求连接的超时时间(ms),该参数小于timeoutInMilliseconds,在连接超时时会
#自动重试路由请求
ribbon.ConnectTimeout=5000
#路由转发请求的超时时间,与请求连接类似
ribbon.ReadTimeout=2000
#开发阶段关闭重试机制,默认出现bug,全局关闭
zuul.retryable=false
#服务提供者维持心跳
eureka.instance.lease-renewal-interval-in-seconds=30
#90秒无心跳服务失效,进行eureka的"剔除任务"
eureka.instance.lease-expiration-duration-in-seconds=90
#网关的核心为过滤器:pre,routing,post,error
public class MyZuulFilter extends ZuulFilter {
//过滤器类型
public String filterType() {
return "pre";
}
//过滤器执行顺序
public int filterOrder() {
return 0;
}
//过滤器是否执行
public boolean shouldFilter() {
return true;
}
//具体逻辑
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
/*String accessToken = request.getParameter("accessToken");
if(accessToken == null) {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
return null;
}*/
return null;
}
}
在具体逻辑中,我们可以做accessToken校验,以及其他验证
#配置中心是整个微服务的统一配置获取模块,所有服务统一地到配置中心取配置。同事集成bus消息总线,来动态地刷新配置(手动或者通过Git动态刷新),无需重启项目。
pom依赖如下:
org.springframework.boot
spring-boot-starter-parent
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-bus-amqp
org.springframework.boot
spring-boot-starter-amqp
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
${project.name}
org.springframework.boot
spring-boot-maven-plugin
${spring-boot.version}
repackage
src/main/java
**/*.xml
src/main/resources
src/test/java
**/*.xml
src/test/resources
application.properties配置内容以及注释如下:
#服务端口
server.port=8881
#服务名称
spring.application.name=zy_config
#服务注册中心
eureka.client.service-url.defaultZone=http://admin:123@peer1:8000/eureka/,http://admin:123@peer1:8100/eureka/
#服务的git仓库地址
spring.cloud.config.server.git.uri=您的git地址uri
#配置文件所在的目录
spring.cloud.config.server.git.search-paths=/**
#配置文件所在的分支
spring.cloud.config.label=master
#git仓库的用户名
spring.cloud.config.username=用户名(github/gitlable)
#git仓库的密码
spring.cloud.config.password=密码
#为配置中心添加安全保护
#security.user.name=user
#security.user.password=123
#关闭安全保护,动态刷新配置中心,开启端口
management.endpoints.web.exposure.include=bus-refresh
#使用消息总线refesh配置中心信息
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.bus.trace.enabled=true
#peer1,peer2是通过电脑中的hosts文件进行配置:
#127.0.0.1 peer1
#127.0.0.1 peer2
#启动类上注解如下:
##博主也是在学习中,在这里简单介绍下springcloud的使用,以及配置文件。希望对您有所帮助!!!!!