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
    评论
Doe 发布 [V1.0.0] 前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端连接口(麻烦而且有限制)。所以扣了dubbo的netty模块源码,封装了个收发客户端集成一个工具,可以快速调试dubbo接口。源码地址:https://github.com/VIPJoey/doe 极简模式 普通模式 目录结构 mmc-dubbo-api 接口项目,主要用于测试。 mmc-dubbo-provider dubbo提供者项目,主要用于测试。 mmc-dubbo-doe 主项目,实现dubbo接口调试。 deploy 部署文档 功能特性 极简模式:通过dubbo提供的telnet协议收发数据。 普通模式:通过封装netty客户端收发数据。 用例模式:通过缓存数据,方便下一次操作,依赖普通模式。 增加依赖:通过调用maven命令,下载jar包和热加载到系统,主要用来分析接口方法参数,主要作用在普通模式。 依赖列表:通过分析pom文件,展示已经加载的jar包。 其它特性 springboot 整合 redis,支持spring el 表达式。 springboot 整合 thymeleaf。 springboot 整合 logback。 netty rpc 实现原理。 开发环境 jdk 1.8 maven 3.5.3 dubbo 2.6.1 lombok 1.16.20 idea 2018 windows 7 安装步骤 安装jdk 安装maven,并设置好环境变量,仓库目录。 进入mmc-dubbo-api目录,执行mvn clean install命令,省api的jar包。 进入mmc-dubbo-doe目录,执行mvn clean install 命令,在target目录生成dubbo-doe-1.0.0-RELEASE.jar 在F盘(可以任意盘)创建目录F:\app\doe 把dubbo-doe-1.0.0-RELEASE.jar拷贝到F:\app\doe 把deploy目录中的所有文件拷贝到F:\app\doe 如果您电脑安装了git bash,可以在bash窗口运行 ./deploy.sh start,否则如果没有安装git bash,只能打开cmd切换到F:\app\doe目录,然后执行java -jar dubbo-doe-1.0.0-RELEASE.jar --spring.profiles.active=prd 打开浏览器,访问地址:http://localhost:9876/doe/home/index 全剧终
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值