注意!!!
这是对上一篇博客 springcloud的延续,整个项目的搭建,来源与上一篇博客。
一、什么是eureka?
// eureka是一个注册中心,实现了dubbo中zookeeper的效果!
二、实现eureka工程的搭建?
1.1 单节点版
1.1 zookeeper 和 eureka的区别?
/*
1.2 创建eureka工程
20190926-springcloud-eureka-management(pom):只管理jar包
子级项目 --20190926-springcloud-eureka-7081(jar):运行了eureka
1.3 jar包的添加
所有的eureka都只会用到一个jar包
eureka并不是springcloud公司的,是Netflix公司的产品,目前springcloud正在开发完善的springcloud架构来代替Netflix所提供的组件
虽然eureka的工程构建仍然需要使用springboot,但是不再需要springboot-web-starter的jar包,因为eureka的jar包中已经有了
// !!!!!如果添加则出现jar包冲突
eureka的jar包添加只需要在父工程中添加即可,所有的子工程都可以继承父工程的jar包
springcloud官网中提供的springcloud2.x版本所规定的jar包格式:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
1.4 eureka整个开发中,不涉及任何与业务有关的代码
/*
application.properties
ApplicationRun.java
@SpringBootApplication
@EnableEurekaServer
*/
1.5 把provider-8081注册进eureka中
/*
在配置zookeeper的时候,无论是服务消费者还是服务生产者,都引入zookeeper的jar包(zkClinet)
在配置eureka的时候,需要引入么?
!!很需要!!
*/
修改application.properties配置文件
在讲zookeeper的时候,zk.address=zookeeper的ip地址
现在使用eureka的时候,也需要eureka的地址(eureka的项目地址)
eureka.client.service-url.defaultZone=http://localhost:7081/eureka
在provider-8081项目的主启动类上添加注解
@EnableDiscoveryClient:
springcloud2.x的版本注解
@EnableEurekaClient:
springcloud1.x的版本注解
1.6 配置eureka服务的信息(actuator-info)
// 为什么要配置?
虽然目前eureka注册中心中只有一个服务,但是在真实开发环境中可能有很多个(35个)
每一个团队/team是有多个人组成的,每一个开发人员开发的功能是不同的,
eg:
电商
cart微服务:zhangsan开发
order微服务:lisi开发
portal微服务:wangwu开发
这些微服务最终都需要注册进eureka中
假设zhangsan所开发的cart微服务出现问题了,这个问题是lisi发现的
如果其中有一个服务出现问题,这个服务正好是自己开发的,但是最终lisi看不到主要信息,直接描述不清楚,这种情况是绝对不允许在团队中出现!
/*
在provider-8081项目的application.properties中进行配置
配置eureka的实例名(Status下面所显示的名字)
不允许出现任何的重复!
eureka.instance.instance-id=虽然可以随意起,但是要求描述出整个微服务的作用
*/
当鼠标移动到服务名的时候,只会显示localhost,但是根据localhost并不能精准的定位到哪一台服务器,需要把localhost改为IP地址
# 在eureka中显示IP地址
// eureka.instance.prefer-ip-adderss=true
配置完毕后显示并不是本机的ip地址
provider的ip地址显示是相对于eureka做的内网映射
在eureka的整个注册中心里会指定内部的ip地址,必须要使provider和eureka在同一个内网中,
一旦provider成功的注册进了eureka,那么eureka就会给provider分配一个自己的内网ip
// 每一台电脑是有两个IP的,一个是公网IP,一个是内网IP
实现点击服务名显示具体的服务信息
先添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
// 在provider-8081项目的application.properties配置文件中添加:
info.author.name=Seven Lee
info.company.name=AAA SOFTWARE EDU
info.project.description=This is Demo
1.7 eureka的自我保护机制?
如果长时间不连接(不激活)eureka的时候,会出现自我保护机制,在eureka页面上会显示:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
/*
为什么会出现自我保护:
有没有可能网络阻塞(网络非常卡),如果发生后,eureka就检测不到provider的心跳
eureka中有200个provider,如果只有3个provider没有心跳,eureka就会直接把这三台直接剔除
但是如果有198个provider都没有心跳,则eureka就不会再剔除,也就是说直接会保留这198个provider
*/
1.8 什么是eureka的AP性?
在eureka中注册过的服务会定时向eureka发送心跳
当网络故障/网络延迟/服务宕机就不会再向eureka发送心跳,eureka从接不到心跳的那一秒开始算起,(90秒)之后会直接把这个服务给剔除
因为provider的机房停电了,大面积的provider都无法向eureka发送心跳,90秒之后还是没有接收到心跳,
eureka就不会再剔除任何一个服务(也就是说会把全部的服务都保留下来)(这个就是eureka的AP性)
/*
为什么eureka不会剔除大量的服务?
AP:只保证了服务的可用性,不保证数据的一致性
CP:只保证了数据的一致性,不保证服务的可用性
如果eureka把所有的服务全部剔除,当consumer进行访问调用的发现eureka中并没有任何服务了,整个项目都会处于瘫痪状态,整个客户端的体验就会非常差,也就是说相当于报错500!
如果当大面积服务都没有心跳,eureka不剔除的情况下,consumer进行访问调用的时候依然可以找到所注册服务,然后就可以直接获取到数据,这些数据可能不是最新的数据!
*/
1.9 如何关闭eureka的自我保护机制:
!!可以关闭!!但是不能这么做!!
在eureka-7081项目的application.properties配置文件中
// eureka.server.enable-self-preservation=false(!!关闭eureka的自我保护机制!!)
提示一下信息:
THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!
在eureka-7081的application.properties配置文件中添加
# eureka自己检测服务的心跳时间(90秒)
# 单位是毫秒,先把eureka检测心跳的时间缩短为10秒
# 也就是说每个10秒就会检测一次服务的心跳
// eureka.server.eviction-interval-timer-in-ms=10000
在provider-8081的application.properties配置文件中添加
# 规定自己向eureka发送心跳的时间
# 单位是秒
// eureka.instance.lease-renewal-interval-in-seconds=5
# 当eureka最后一次检测到心跳的时间间隔(单位是秒)
# eg:15:05:20是最后一次检测到心跳-->检测8秒之后还是无法检测心跳的时候直接剔除
// eureka.instance.lease-expiration-duration-in-seconds=8
2.集群版 (正宗的eureka!)
二、eureka项目jar包的添加,和相关配置文件?
2.1 20190927-springcloud-eureka-management父级项目的 jar包
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-eureka-management</artifactId>
<packaging>pom</packaging>
<modules>
<module>20190927-springcloud-eureka-7081</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2.2 把provider-8081注册进eureka中 的文件配置?
server.port=8081
server.servlet.context-path=/
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/qy100?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.type-aliases-package=com.aaa.zxf.model
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#三、
spring.application.name=user-provider
#一、
#配置eureka 的注册地址,将provider 注册进来。
#一台eureka, 此时的命名空间是失效的。
#二、 注意!
#eureka.client.service-url.defaultZone=http://localhost:7081/eureka
eureka.client.service-url.defaultZone=http://localhost:7081/eureka
#四
#在eureka中配置实例, 就是eureka的status下显示的名字
eureka.instance.instance-id=user-provider-8081
#五、
#在eureka中显示ip的地址
eureka.instance.prefer-ip-address=true
#六 点击eureka的服务名显示出该服务的具体信息
info.autor.name=ZhouXu
info.company.name=AAA
info.project.desription=This is Demo
#七 现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
eureka.instance.lease-renewal-interval-in-seconds=5
#eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=8
provide-8081启动类添加注解。
package com.aaa.zxf;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
*
* 将provider 注册到 eureka 需要添加注解
* @EnableDiscoveryClient
*/
@SpringBootApplication
@MapperScan("com.aaa.zxf.mapper")
@EnableDiscoveryClient
public class ApplicationRun8081 {
public static void main(String[] args) {
SpringApplication.run(ApplicationRun8081.class,args);
}
}
2.3 eureka服务的信息配置?
20190927-springcloud-eureka-7081子级项目(jar)
<artifactId>20190927-springcloud-provider-8081</artifactId>
<dependencies>
<dependency>
<groupId>com.aaa</groupId>
<artifactId>20190927-springcloud-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
7081的application.properties配置。
# 一、
#eureka 注册中心的相关配置
server.port=7081
server.servlet.context-path=/
#二、
#就是给 eureka 起了一个名字。 不可乱起。
#hostname就是本台服务器的域名,不配置就是localhost
eureka.instance.hostname=localhost
#三、
eureka.client.register-with-eureka=false
#四、
eureka.client.fetch-registry=false
#五、
#1. eureka的指向地址
#eureka不需要做任何服务器配置,但是也必须要指向地址(直接指向eureka的项目即可:http://localhost:7081/eureka)
#2. localhost
#3. 单节点的配置
eureka.client.service-url.defaultZone=http://localhost:7081/eureka
#六
#关闭eureka的自我保护机制:
#!!可以关闭!!但是不能这么做!!
#eureka.server.enable-self-preservation=false
#七 现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
#1. provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!
#2. eureka自己检测服务的心跳时间(90秒)
eureka.server.eviction-interval-timer-in-ms=10000
#eureka.server.eviction-interval-timer-in-ms=10000
7081的启动类
package com.aaa.zxf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* 关于注解?
* @EnableEurekaServer: 就是开启eureka的服务器端
*
* @EnableEurekaClient: !!!!不让用!!!!(springcloud1.x的注解)
*/
@SpringBootApplication
@EnableEurekaServer
public class ApplicationRun7081 {
public static void main(String[] args) {
SpringApplication.run(ApplicationRun7081.class,args);
}
}
图解单节点
手机扫一扫
移动阅读更方便
你可能感兴趣的文章