eureka应用入门
eureka分为服务端和客户端
搭建eureka服务端
①加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
②写注解 在主启动类上 写上@EnableEurekaServer注解
@EnableEurekaServer
public class Tulingvip01MsEurekaServerApplication {
}
③:编写配置文件
#eureka服务端应用的端口默认是8761
server.port=9000
#表示是否将自己注册到Eureka Server,默认为true,由于当前应用就是Eureka Server,故而设为false
eureka.client.register-with-eureka=false
#表示是否从Eureka Server获取注册信息,默认为true,因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false
eureka.client.fetch-registry=false
#暴露给其他eureka client 的注册地址
eureka.client.service-url.defaultZone: http://localhost:9000/eureka/
搭建eureka客户端
①:加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
②:加入注解@EnableDiscoveryClient
@EnableDiscoveryClient
public class Tulingvip01MsConsumerUser8001Application{
}
③:编写配置文件
server.port=8001
#注册到eureka服务端的微服务名称
spring.application.name=ms-consumer-user
#注册到eureka服务端的地址
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
#点击具体的微服务,右下角是否显示ip
eureka.instance.prefer-ip-address=true
#显示微服务的名称
eureka.instance.instance-id=ms-consumer-user-8001
mybatis.configuration.map-underscore-to-camel-case=true
#配置数据库
spring.datasource.url=jdbc:mysql://47.104.128.12:3306/tuling-cloud
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
logging.level.com.tuling.dao=debug
④: 调用 使用RestTemplate (调用的时候不再是通过Ip 和地址发起调用,而是通过微服务名称进行调用)
需要加入@LoadBanlance 注解
@RequestMapping("/queryUserInfoById/{userId}")public UserInfoVo queryUserInfoById(@PathVariable("userId") Integer userId) {User user = userServiceImpl.queryUserById(userId);ResponseEntity<List> responseEntity = restTemplate.getForEntity("http://MS-PROVIDER-ORDER/order/queryOrdersByUserId/"+userId,List.class);List<OrderVo> orderVoList = responseEntity.getBody();UserInfoVo userInfoVo = new UserInfoVo();userInfoVo.setOrderVoList(orderVoList);userInfoVo.setUserName(user.getUserName());return userInfoVo;}
@Configuration
public class MainConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
Eureka 部署架构
eureka的一些特性
1、Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP、端口、微服务名称等),Eureka Server会存储这些信息;
2、Eureka Client是一个Java客户端,用于简化与Eureka Server的交互(启动的时候,会向server注册自己的信息)
3、微服务启动后 renew,会周期性(默认30秒)地向Eureka Server发送心跳以续约自己的“租期”;
4、如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳(最后一次续约时间开始计算),Eureka Server将会注销该实例(默认90秒);
5、默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例,互相之间通过增量复制的方式,来实现服务注册表中数据的同步。Eureka Server默认保证在90秒内,Eureka Server集群内的所有实例中的数据达到一致(从这个架构来看,Eureka Server所有实例所处的角色都是对等的,没有类似Zookeeper、选举过程,也不存在主从,所有的节点都是主节点。Eureka官方将Eureka Server集群中的所有实例称为“对等体(peer)”)
6、Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用
Eureka配置的总要信息讲解
①:服务注册配置
eureka.client.register-with-eureka=true
该项配置说明,是否向注册中心注册自己,在非集群环境下设置为false,表示自己不注册自己
eureka.client.fetch-registry=true
该项配置说明,注册中心只要维护微服务实例清单,非集群环境下,不需要作检索服务,所有也设置为false
②:服务续约配置
eureka.instance.lease-renewal-interval-in-seconds=30(默认)
该配置说明,服务提供者会维持一个心跳告诉eureka server 我还活着,这个就是一个心跳周期
eureka.instance.lease-expiration-duration-in-seconds=90(默认)
该配置说明,你的最后一次续约时间开始,往后推90s 还没接受到你的心跳,那么我就需要把你剔除.
③:获取服务配置 (前提,eureka.client.fetch-registry为true)
eureka.client.registry-fetch-interval-seconds=30
缓存在调用方的微服务实例清单刷新时间
4)eureka 的自我保护功能
默认情况下,若eureka server 在一段时间内(90s)没有接受到某个微服务实例的心跳,那么eureka server 就会剔除
该实例,当时由于网络分区故障,导致eureka server 和 服务之间无法通信,此时这个情况就变得很可怕—因为微服务是实例健康的,本不应注销该实例.
那么通过eureka server 自我保护模式就起作用了,当eureka server节点短时间(15min是否低于85%)丢失过多客户端是(由于网络分区),那么该eureka server节点就会进入自我保护模式,eureka server 就会自动保护注册表中的微服务实例,不再删除该注册表中微服务的信息,等到网络恢复,eureka server 节点就会退出自我保护功能(宁可放过一千,不要错杀一个)
eureka 的高可用 搭建
启动二个eureka server 9000端口 和9001端口
9000 端口的工程配置
server.port=9000
#表示是否将自己注册到Eureka Server 表示9000的服务端需要向9001工程注册自己
eureka.client.register-with-eureka=true
#表示是否从Eureka Server获取注册信息,默认为true,需要从9001上同步数据
eureka.client.fetch-registry=true
讲自己注册到9001上去
eureka.client.service-url.defaultZone: http://www.eureka9001.com:9001/eureka/
9001端口配置
server.port=9001
#表示是否将自己注册到Eureka Server 表示9001的服务端需要向9000工程注册自己
eureka.client.register-with-eureka=true
#表示是否从Eureka Server获取注册信息,默认为true,需要从9000上同步数据
eureka.client.fetch-registry=true
讲自己注册到9000上去
eureka.client.service-url.defaultZone: http://www.eureka9000.com:9000/eureka/??
微服务提供者配置,需要向二个注册中心进行注册
eureka.client.serviceurl.defaultZone=http://www.eureka9000.com:9000/eureka/,http://www.eureka9001.com:9001/eureka/??
安全配置 我们现在访问eureka server 直接访问 没有授权
导入安全配置 依赖
org.springframework.boot
spring-boot-starter-security
修改yml配置文件
//注册的时候需要带入 用户名 密码 基本格式为 http:用户名:密码@ip:端口/eureka/
eureka.client.service-url.defaultZone: http://${spring.security.user.name}:${spring.security.user.name}@www.eureka9000.com:9000/eureka///开启默认的认真
spring.security.basic.enable=true
spring.security.user.name=root
spring.security.user.password=123456===============================================================客户端配置
注册地址修改为这个
eureka.client.service-url.defaultZone=http://${security.login.username}:${security.login.pass}@www.eureka9000.com:9000/eureka/