为了了解微服务,简单使用微服务架构方式完成一个小小的记账项目模拟。
实现前后端分离,前端进链接,后端传JSON数据,达到这样的效果,使服务与服务之间分离。
项目构建 1.创建SpringCloud父工程配置好pom文件
com.wly manage-springcloud1.0-SNAPSHOT manage-service manage-eureka manage-config manage-gateway manage-view pom spring-boot-starter-parent org.springframework.boot 2.1.5.RELEASE 1.8 Greenwich.SR1 2.1.5 8.0.25 org.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import tk.mybatis mapper-spring-boot-starter${mapper.starter.version} mysql mysql-connector-java${mysql.version} org.projectlombok lombokorg.springframework.boot spring-boot-maven-plugin
注意在packging中要声明pom,表示这是父工程
2.搭建eureka注册中心我们在父工程中创建新的module名为manage-eureka
并引入eureka注册中心服务的依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
然后生成启动类和配置文件
启动类上要添加启动eureka服务的注解 @EnableEurekaServer
配置文件如下:
配置文件中声明了注册中心本身服务的端口号,自身的服务名(id),服务地址以及相关的其他配置。
server:
port: 10085
#该注解表示本应用的名称
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10085/eureka
#不注册自己
register-with-eureka: false
#不拉取服务
fetch-registry: false
server:
#每10000毫秒(10秒)去检查是否有超时的服务并剔除,默认60 eviction——驱逐
eviction-interval-timer-in-ms: 10000
#该配置表示eureka自我保护模式是否开启
enable-self-preservation: false
3.创建网关服务——Gateway
Spring Cloud Gateway
组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对
应的微服务。
Spring Cloud Gateway
是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点
IP
端口信息,
从而加强安全保护。
Spring Cloud Gateway
本身也是一个微服务,需要注册到
Eureka
服务注册中心。
网关的核心功能是:过滤和路由
下面看配置:
引入依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-gateway
启动类要注解声明被服务发现——
@EnableDiscoveryClient
配置文件中声明端口号、服务id、线路断言和目标路径、跨域、负载均衡、熔断等。
这里网关的端口号为8086,固定的能够路由到记账服务的路径要求为 /api/bill/**。
server:
port: 8086
spring:
application:
name: manage-gateway
cloud:
gateway:
routes:
- id: manage-service-route
uri: lb://manage-service
predicates:
- Path=/api/bill/**
filters:
#去除一个路径后调取服务
- StripPrefix=1
- id: manage-view-route
uri: lb://manage-view
predicates:
- Path=/index
#跨域访问
globalcors:
cors-configurations:
'[/**]':
# *表示全部
allowedOrigins:
- "*"
allowedMethods:
- GET
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10085/eureka
instance:
prefer-ip-address: true
#熔断
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000 #服务降级超时时间,默认1S
#负载均衡
ribbon:
ConnectTimeout: 1000 # 连接超时时长
ReadTimeout: 2000 # 数据通信超时时长
MaxAutoRetries: 0 # 当前服务器的重试次数
MaxAutoRetriesNextServer: 0 # 重试多少次服务
4.创建配置中心
需要的依赖:
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-config-serverorg.springframework.cloud spring-cloud-busorg.springframework.cloud spring-cloud-stream-binder-rabbit
启动类上添加 @EnableConfigServer表示开启配置中心服务
配置文件:
server:
port: 10086
spring:
application:
name: manage-config
cloud:
config:
server:
git:
uri: https://gitee.com/My1310835162/manage-config.git
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10085/eureka
#暴露出触发消息总栈的地址,此地址在仓库配置发生变动之后,可手动发送post形式的请求到:http://127.0.0.1:{本服务端口号}/actuator/{暴露的地址}
#此处为:http://127.0.0.1:10086/actuator/bus-refresh
management:
endpoints:
web:
exposure:
include: bus-refresh
uri的值为存放配置文件的git仓库地址
我的是这样:
5.记账后台服务
这里要注意,服务类要使用配置中心的话引入的依赖为 spring-cloud-starter-config
config配置中心服务本身使用的是 spring-cloud-config-server
不要添加错了。
配置文件使用bootstrap.yml
bootstrap.yml 文件也是 Spring Boot 的默认配置文件,而且其加载的时间相比于 application.yml 更早。 application.yml 和 bootstrap.yml 虽然都是 Spring Boot 的默认配置文件,但是定位却不相同。 bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。application.yml 可以用来定义应用级别 的参数,如果搭配 spring cloud confifig 使用, application.yml 里面定义的文件可以实现动态替换。 总结就是, bootstrap.yml 文件相当于项目启动时的引导文件,内容相对固定。 application.yml 文件是微服务 的一些常规配置参数,变化比较频繁。spring:
cloud:
config:
name: bill
profile: dev
discovery:
service-id: manage-config
#启用配置中心
enabled: true
label: master
#rabbit默认配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
#注册到微服务注册中心
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10085/eureka
spring.cloud.config中配置好要引用的配置文件的名、域、分支以及要使用的配置中心服务的注册id。
rabbit是消息队列设置,实现不重启微服务的情况下可以做到更新配置文件。
当然,前提是在配置中心中配置了相关参数,以及需要在服务controller中注明 @RefreshScope
表示监控和刷新。
由于本博客重点是记录微服务的运行逻辑,具体的服务逻辑这里不做展示。
此时,我们依次启动注册中心 > 网关服务 > 配置中心 > 记账服务后台 进行测试。
这里使用便捷的api接口测试应用——Postman进行测试,数据成功返回,代表注册中心、网关、配置中心、服务本身都正常运行。
之后,前端利用ajax可以到指定的网关路径,然后网关路由到服务接口进行执行,将执行结束的json数据返回到网关再返回给前端页面进行使用。
如下:
这里是进入页面后利用ajax发送了获得分页list的请求,到达网关后路由到后端记账服务,然后成功获取到返回的json格式的数据,这里弹出数据以表示获取成功。
微服务架构使各个环节的开发耦合性更低,提高开发效率,这里作为初学者简单熟悉了一下微服务的基础架构,将来还会深入了解,并在此基础上重构项目。
以此记录。



