序言
当一个项目的代码量越来越多时,模块功能也会越来越繁杂,导致后期的维护修改异常困难。所以我们必须采用一些结构思想来解决这一开发难题。
解决方案:将大项目根据业务等细分成多个小项目
分成小项目的优点:
1、方便有针对性的管理和维护对应模块的业务代码
2、每个小项目业务都独立运行,即使某个小项目出现异常停机也不会影响到其他的业务
好了,我们将项目分解成多个项目了,那么项目之间如何进行接口的调用呢?
其实很简单,只需要你把所有的微服务都运行起来不就可以访问了吗?
但问题来了,这么多的微服务,微服务中还有那么多的接口,你怎么知道具体请求呢?
所以我们引入一个概念:注册中心(Eureka)
注册中心(Eureka)(说白了也是一个微服务)
微服务调用另一个微服务的流程如下(微服务可以是生产者也是消费者):
1、微服务将自己注册到注册中心里,而且还定时向注册中心上报心跳信息,表示自己还能提供服务,否则注册中心将该服务剔除(前提你肯定得创建了注册中心,注册中心也是一个微服务)
2、调用服务从注册中心里发现想要的服务,注册中心返回该服务的接口给调用服务
3、调用服务通过接口来调用微服务
实现注册中心的高可用(防止单台注册中心出现异常而整个系统停滞)
那么大概的思想就是这样了,接下来我们看看用代码该如何实现这微服务的架构
如何实现?
一、创建注册中心
注册中心目录结构很简单,就一启动类、配置文件、pom.xml就可以了
1、引入依赖(Eureka的服务端,即注册中心)
<dependencies>
<!-- 导入Eureka服务的依赖 内含springboot的包,所以不用引进spring-boot-web-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2、启动类上添加 @EnableEurekaServer 表示该项目是注册中心
@EnableEurekaServer //标识此工程是EurekaServer工程(相对的是EurekaClient)
@SpringBootApplication
public class GovernCenterApplication {
public static void main(String[] args) {
SpringApplication.run(GovernCenterApplication.class, args);
}
}
3、yml配置文件(通过参数的传入启用多台注册中心实现高可用)
server:
port: ${PORT:50101} #服务端口
spring:
application:
name: xc‐govern‐center #指定服务名
eureka:
client:
registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中
fetchRegistry: true #服务发现,是否从Eureka中获取注册信息
serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置则默认本机8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/} #向该IP地址的Eureka注册服务且上报心跳信息等(域名可设置,在C盘host文件修改即可)
server:
enable‐self‐preservation: false #是否开启自我保护模式
eviction‐interval‐timer‐in‐ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01}
传入配置文件的参数并启动则成功创建注册中心!
二、将微服务注册到注册中心
1、引入依赖(Eureka的客户端,即要被注册的微服务)
<!-- 导入Eureka客户端的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、启动类添加 @EnableDiscoveryClient表示它是一个Eureka的客户端
@SpringBootApplication
@EnableDiscoveryClient //表示它是一个Eureka的客户端
3、yml配置文件
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: ${EUREKA_SERVER:http://eureka01:50101/eureka/, http://eureka02:50102/eureka/} #该微服务向eureka01注册中心注册且上报心跳,如果该注册中心down了,则向eureka02注册
instance:
prefer‐ip‐address: true #将自己的ip地址注册到Eureka服务中
ip‐address: ${IP_ADDRESS:127.0.0.1} #Eureka网页中,鼠标悬浮微服务地址时显示IP信息
instance‐id: ${spring.application.name}:${server.port} #指定实例id
lease-renewal-interval-in-seconds: 1 #Eureka客户端发送心跳的时间间隔(单位秒,默认30秒)
lease-expiration-duration-in-seconds: 2 #Eureka服务端在收到最后一次心跳后等待时间上限(单位秒,默认90秒),超时将剔除服务
启动则成功将该微服务注册到注册中心!
其中“eureka01”“eureka02”是修改的域名,
eureka域名在 C:\Windows\System32\drivers\etc的hosts文件修改
其实本质"eureka01"是等同localhost,只不过是改了个域名而已。
浏览器输入http://localhost:50101/显示注册中心的管理页面
1、DS Replicas:该注册中心的备用注册中心(这个注册中心down了,另一个注册中心顶上)
2、Instances currently registered with Eureka:注册到该注册中心的微服务实例