概述
简单的来说,所谓微服务就是将我们的整个网站服务划分为一个个独立的服务。
比如我们目前运营着一个商城服务,我们就可以将订单系统和支付系统进行拆分,而各个服务通过 mq(消息队列) 进行通讯。
这样做拥有很多好处。比如由于服务都是独立相对的,此时我们就可以使用多种语言进行开发。
另外,当我们需要对一块服务进行更新迭代的时候,我们只需要对该服务进行更改并重新上传。
其实最重要的就是:解耦合。
而 SpringCloud 其实就是一个基于 SpringBoot 的一套微服务解决方案。它整合了一系列实现微服务所需要的服务框架,包括不限于:服务发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等,以 SpringBoot 的开发风格做到一键启动和部署。
本文记录一个简单的微服务 demo。 由 eureka 服务发现 + gateway 网关 + 简单的服务 组成。
开始
简单的来说,当我们去抓一个拥有微服务架构的网站的数据包时其实和正常网站差不多,但是按照微服务的架构来看,每一个服务其实是独立的,可以理解为运行在不同的服务器之上!那么为什么我们访问的一直都是那个 url 呢? 其实很显然,在各个微服务之上有一层网关作为路由使用。这样就引入了 gateway 了~
当然,网关并不只有这样一个功能,还可以实现:限流、重试、跨域、路由、鉴权等功能。
而当我们的服务非常非常多的时候管理起来也很是麻烦,所以我们将每一个服务注册给 eureka 进行统一管理。相对的还可以部署某个服务的集群来去做负载均衡等功能。
代码
简单的来说,eureka 使用 C/S 架构。
EurekaServer 服务端
pom包
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
yml配置
由于获取注册信息和注册到 Server 默认为 true,所以需要手动设置为 false.
spring:
application:
name: eureka #当前服务的名称
server:
port: 8761
eureka:
client:
fetch-registry: false #获取注册信息
register-with-eureka: false #注册到 eurekaServer
此外在启动类之上加入@EnableEurekaServer即可。当访问 localhost:8761 看到以下界面变为成功。
EurekaClient 用户端(简单的服务)
其实就是简单的写一个 controller,当访问 /system/test 返回 success。
pom 包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
yml 配置
spring:
application:
name: system
server:
port: 9001
servlet:
context-path: /system #给 URL 统一以 /system 为开头
eureka:
client:
service-url:
defalutZone: http://localhost:8761/eureka #连接注册中心
此后在启动类之上加入 @EnableEurekaClient 注解即可。此时打开注册中心的网页管理页面就可以看到此服务了。
gateway 网关服务
pom 包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
yml 配置
spring:
application:
name: gateway
cloud:
gateway:
routes: #以下为一个数组,需要增加的话继续往下写就行,主要作用为配置路由。
- id: system #对应的服务
uri: http://127.0.0.1:9001 #地址
predicates:
- name: Path
args:
- /system/** #当请求的地址是以 /system/为开头的 url 时就去转发到以上 uri 参数中的地址。
server:
port: 9000
eureka:
client:
service-url:
defalutZone: http://localhost:8761/eureka
最后同上,在启动类中加上@EnableEurekaClient 注解。
end
此时当访问 localhost:9000/system/test 就会返回「success」。
本页的评论功能已关闭