服务发现Discovery
在controller中导入client
@Autowired
private DiscoveryClient discoveryClient;
编写代码获取服务信息
@GetMapping(value = "/discovery")
public Object discovery(){
List<String> services = discoveryClient.getServices();
for ( String service : services) {
log.info("************service: " + service);
}
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for ( ServiceInstance instance : instances) {
log.info("**************instance: " + instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort()+ "\t" + instance.getUri());
}
return discoveryClient;
}
在启动类上添加注解
@SpringBootApplication
@EnableEurekaClient //允许注册到eureka
@EnableDiscoveryClient //开启服务发现
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class,args);
}
}
自我保护机制
在某一时刻,某个微服务不能用了,eureka不会立刻清理,依旧会对该服务的信息进行保存
属于CAP中的AP
默认开启自我保护
如何禁止自我保护
在Eureka服务端yml中修改配置
eureka:
server:
#关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false
# 心跳检测时间
eviction-interval-timer-in-ms: 2000
重启,会出现以下提示
在客户端修改yml配置测试
eureka:
instance:
# Eureka 客户端向服务端发送心跳的时间间隔,单位为s 默认为30秒发送一次
lease-renewal-interval-in-seconds: 1
#Eureka 服务端在收到最后一次心跳后等待时间上限,单位为s 默认为90秒,超时将剔除服务
lease-expiration-duration-in-seconds: 2
服务端yml
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false # false表示不向注册中心注册自己
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索实例
service-url:
#设置与eureka server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/
server:
#关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false
# 心跳检测时间,多少s发送一次检测
eviction-interval-timer-in-ms: 2000
客户端yml
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: root
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.yf.springcloud.entities
eureka:
client:
#是否将自己注册金eurakaserver,默认为true
register-with-eureka: true
#是否从EurakaServer抓取已有的注册信息,默认为true
fetch-registry: true
service-url:
# defaultZone: http://localhost:7001/eureka
#集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/
instance:
instance-id: payment8001
prefer-ip-address: true #访问路径显示IP地址
# Eureka 客户端向服务端发送心跳的时间间隔,单位为s 默认为30秒发送一次
lease-renewal-interval-in-seconds: 1
#Eureka 服务端在收到最后一次心跳后等待时间上限,单位为s 默认为90秒,超时将剔除服务
lease-expiration-duration-in-seconds: 2