一. 背景
最近基于SpringCloud+SpringSecurity+Auth2微服务改造项目终于上线,有心思和时间进行整理项目资料,废话不多说,直接上图
先来一张官方文档说明,可以看出微服务架构适应于物联网、移动端、浏览器,学习并使用微服务是很有必要的一件事。
下面这张图是我所在项目所构建的项目架构图
因为项目紧急,并未使用SpringCloud的配置中心,仅仅使用了SpringCloud的以下组件:
1.Feign声明式调用
2.Zuul路由转发
3.Zipkin调用分析
4.Eureka注册中心
5.Hystrix熔断
二.架构思路
其实本人也是第一次进行项目架构,属于赶鸭子上架那种,木办法,Not me who,Not now when !
谁不想拥有一个高可用、低耦合、易扩展的coding体系,但真正实操起来,才发现有多欠,暂时不表。
1.为了实现每个服务模块的低耦合,每个服务模块都有自己的依赖包xxx-share.jar
2.为了实现高可用,使每个模块都可独立部署并随时增加/删除服务节点xxx-server
感觉还是在说废话!!!
3.来点干货,项目中使用的技术栈由以下几部分:
(1)基于SpringSecurity+Auth2做的授权认证
(2)RocketMq的消息队列
(3)Redis集群缓存服务
(4)自定义线程池
(5)mybatis
(6)hikari数据库连接池
(7)lombok
据阿里P8大佬说,如果你能玩转Spring和redis基本上就足以应付目前所有的业务开发,不要问我为啥用上面的技术选型,大概也许这就是所谓的缘分吧。
三.实战
不能说太多概念上的东西,先玩起来再说,说太多概念性的东西容易让人厌烦。
1.eureka原理
eureka是为CS架构的注册中心,分为服务端server和客户端client.
(1). eureka-server的作用主要有以下几点
eureka-server主要集中在提供服务注册和发现的功能,在服务治理方面不如dubbo做得好。它主要是通过维护两层缓存机制来维护注册表,通过注册和心跳机制来维护更新同步各个客户端的状态。
(2).eureka-client的作用有以下几点
eureka-client通过和eureka-server进行注册、心跳通讯来完成服务注册和服务续约。默认30秒进行一次心跳来告知eureka-server哥们,我还活着。当90秒内eureka-server还没收到来自eureka-client的心跳就会把eureka-client给剔除掉。
2.注册中心-eureka-server
(1)eureka-server基础配置
#基础信息配置
server:
port: 8080
spring:
application:
name: eureka-server
security:
user:
name: admin
password: admin123
#注册中心
eureka:
instance:
hostname: eureka-server
#server收到下次心跳的超时时间,如果30秒还收不到,那你这个instance就拜拜,不和你玩了
leaseExpirationDurationInSeconds: 30
#client发送给server心跳的时间间隔
leaseRenewalIntervalInSeconds: 10
preferIpAddress: true
ipAddress: ${spring.cloud.client.ip-address}
instanceId: ${spring.cloud.client.ip-address}:${server.port}
server:
# 自我保护模式关闭
enableSelfPreservation: false
# 扫描失效服务的间隔时间
eviction-interval-timer-in-ms: 30000
client:
#防止向自己注册
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
logging:
level:
org.springframework.security: DEBUG
config: classpath:logback.xml
(2)注册中心访问保护
注册中心服务访问的页面最好使用基础的认证,尽量保证安全。
同时可以保证每个注册过来的服务都是我们自己想要注册的。
(3)官方eureka闭源了,无需担心,总会有解决方案
3.eureka-client注册服务
(1)eureka-client其实就是一个独立的服务,配置如下:
#注册中心
eureka:
client:
serviceUrl:
defaultZone: http://admin:admin123@localhost:8080/eureka/
instance:
preferIpAddress: true
ipAddress: ${spring.cloud.client.ip-address}
instanceId: ${spring.cloud.client.ip-address}:${server.port}
(2)eureka-client服务的启动类上应加上@EnableEurekaClient
码云项目地址:https://gitee.com/lvxiucai/jianghu-micro-service