springcloud学习笔记-Eureka服务注册与发现

下面所有的7002项目名称和端口均改为7003,8002项目名称和端口也改为8003

Eureka基础知识

单机Eureka的构建步骤

IDEA生成EurekaServer端服务provider注册中心

  1. 创建子模块cloud-eureka-server7001
  2. POM文件中添加依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!--    引入自定义的api通用包,可以使用Payment支付Entity    -->
        <dependency>
            <groupId>pers.chao.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- boot web actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
  1. 修改application.yml文件
server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: localhost
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  #        defaultZone: http://eureka7002.com:7002/eureka/  #集群指向其他eureka

  1. 写主动类,服务注册中心
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class);
    }
}

  1. 测试,在地址栏输入localhost:7001,出现Eureka服务注册中心界面:
    在这里插入图片描述
    服务中心总没有服务注册进来

EurekaClient端cloud-provider-payment8001将注册进EurekaServer成为服务提供者

  1. 修改pom文件添加Eureka相关依赖
<!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

  1. 修改applicatin.yml文件
eureka:
  client:
    #是否将自己注册到注册中心, 默认true
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,单机无所谓,集群必须设置为true配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka  #单机版
  1. 修改启动类
@EnableEurekaClient
@SpringBootApplication
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class);
    }
}
  1. 测试:访问localhost:7001
    在这里插入图片描述

EurekaClient端cloud-consumer-order80将注册进EurekaServer成为服务消费者consumer

步骤和8001一样,不再叙述

集群Eureka构建步骤

  1. Eureka集群原理说明
    如果单个服务不可用,则造成整个业务不可用
  2. EurekaServer集群环境搭建构建,构建cloud-eureka-server7002
  3. 添加依赖和写主动类
  4. 修改windows本地hosts文件
    在这里插入图片描述

在这里插入图片描述

  1. 修改cloud-eureka-server7002的application.yml文件
server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7001.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/
  #        defaultZone: http://eureka7002.com:7002/eureka/  #集群指向其他eureka

  1. 修改cloud-eureka-server7001的application.yml文件
server:
  port: 7002

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7002.com
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
    fetch-registry: false
    service-url:
      #设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/
  #        defaultZone: http://eureka7002.com:7002/eureka/  #集群指向其他eureka

  1. 测试
    相互访问,相互可以看到注册了对方
    在这里插入图片描述
    在这里插入图片描述
  2. 将支付服务8001微服务注册发布到7001和7002Eureka集群中
    修改8001application.yml文件如下:
    在这里插入图片描述
  3. 将订单服务80微服务发布到7001和7002集群配置中
    修改80的application.yml文件同样如此
  4. 支付服务提供者8001集群环境搭建
    目的是提供多个可用性服务,防止单个微服务宕机
    创建cloud-provider-payment8002微服务模块,8001和8002的配置完全相同, 相当于是8001的克隆复制
    访问:http://localhost:7001/出现如下:
    在这里插入图片描述
    我们到目前为止,80服务的访问实例是写死的:
    我们修改为微服务的名称,让调用微服务方只关心微服务名称,而不关心由谁来提供微服务。
public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";

随后进行测试:
在这里插入图片描述
结果出错,报错信息为调用的服务不清楚是哪个主机提供服务
我们为RestTemplate添加注解@LoadBalanced,开启RestTemplate的负载均衡功能:
在这里插入图片描述
并在8001和8003微服务的controller修改代码如下,以明显观察调用成功后端口的变化:
在这里插入图片描述

重新访问:
在这里插入图片描述
在这里插入图片描述

如果不断的访问,将会是由8001和8003轮询交替提供服务。

actuator微服务信息完善

引入依赖,一般搭配web-starter依赖一起使用

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. 主机名称:服务名称修改
    修改8001和8002的application.yml文件
    在这里插入图片描述

  2. 访问信息有IP信息提示
    鼠标放在实例名称上,电脑左下角有IP地址信息提示
    同样修改application.yml文件

instance:
    instance-id: payment8001
    prefer-ip-address: true

测试:
在这里插入图片描述

服务发现Discovery

  1. 修改主启动类,添加类注解@EnableDiscoveryClient
  2. 在controller类中编写自测方法:
@GetMapping(value = "/payment/discovery")
    public Object discovery(){
        List<String> services= discoveryClient.getServices();
        for(String element : services){
            log.info("*******"+element);
        }
        List<ServiceInstance> instances=discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for(ServiceInstance instance: instances){
            log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
        }
        return this.discoveryClient;
    }
  1. 测试:
    在这里插入图片描述
    在这里插入图片描述

Eureka自我保护

某时刻某一个微服务不可用了(可能是因为网络故障原因),Eureka不会立刻清理,依旧会对该微服务的信息进行保存
Eureka的自我保护机制默认为开启的,通过在application.yml文件中修改eureka.server.enable-self-preservation=false来设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值