040_Eureka服务注册与发现

博客 动态
0 175
优雅殿下
优雅殿下 2022-03-22 09:57:11
悬赏:0 积分 收藏

040_Eureka 服务注册与发现

目录
  • 什么是Eureka
  • 原理讲解
    • Eureka的基本架构
    • 三大角色
    • 盘点目前工程状况
  • 创建Eureka服务端子模块 springcloud-eureka-7001
    • 导入依赖 pom.xml
    • 配置文件 application.yml
    • 启动类,添加开启Eureka服务端注解
    • 启动测试
  • 服务提供者子模块 springcloud-provider-dept-8001
    • pom.xml添加Eureka依赖
    • application.yml添加Eureka配置
    • 启动类中,添加开启Eureka服务注解
    • 启动测试
    • 完善Eureka监控信息 Actuator
      • pom.xml添加依赖
      • application.yml配置:监控信息 actuator-info
      • 开启测试
    • application.yml配置:修改Eureka监控页面上服务默认描述
    • 服务发现:获取其他微服务信息
      • 编写代码
      • 启动类,添加开启服务发现的注解
      • 启动测试
  • 自我保护机制

什么是Eureka

image.png

原理讲解

Eureka的基本架构

image.png
image.png
image.png
image.png

三大角色

image.png

盘点目前工程状况

创建Eureka服务端子模块 springcloud-eureka-7001

image.png
image.png
image.png

导入依赖 pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>springcloud</artifactId>        <groupId>com.qing</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>springcloud-eureka-7001</artifactId>    <properties>        <maven.compiler.source>8</maven.compiler.source>        <maven.compiler.target>8</maven.compiler.target>    </properties>    <dependencies>        <!--服务提供者使用eureka,eureka服务端使用eureka-server-->        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka-server</artifactId>            <version>1.4.6.RELEASE</version>        </dependency>        <!--热部署-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>        </dependency>    </dependencies></project>

配置文件 application.yml

server:  port: 7001# Eureka配置eureka:  instance:    hostname: localhost # Eureka服务端的实例名称  client:    register-with-eureka: false # 表示是否向eureka注册中心注册自己,这是eureka服务端不需要注册,其他服务需要注册为true    fetch-registry: false # 如果为false,表示这是注册中心,其他服务需要为true    service-url: # 注册url,监控页面是:http://${eureka.instance.hostname}:${server.port}      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

源码:
image.png

启动类,添加开启Eureka服务端注解

package com.qing.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServer // 开启Eureka服务端public class EurekaServer_7001 {    public static void main(String[] args) {        SpringApplication.run(EurekaServer_7001.class, args);    }}

image.png

启动测试

监控页面:http://${eureka.instance.hostname}??{server.port}
http://localhost:7001
image.png
image.png

服务提供者子模块 springcloud-provider-dept-8001

pom.xml添加Eureka依赖

<!--服务提供者使用eureka,eureka服务端使用eureka-server--><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-eureka</artifactId>    <version>1.4.6.RELEASE</version></dependency>
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>springcloud</artifactId>        <groupId>com.qing</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>springcloud-provider-dept-8001</artifactId>    <properties>        <maven.compiler.source>8</maven.compiler.source>        <maven.compiler.target>8</maven.compiler.target>    </properties>    <dependencies>        <!--springcloud-api模块,实体类-->        <dependency>            <groupId>com.qing</groupId>            <artifactId>springcloud-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>        </dependency>        <dependency>            <groupId>ch.qos.logback</groupId>            <artifactId>logback-core</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-test</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--jetty-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jetty</artifactId>        </dependency>        <!--热部署-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>        </dependency>        <!--服务提供者使用eureka,eureka服务端使用eureka-server-->        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>            <version>1.4.6.RELEASE</version>        </dependency>    </dependencies></project>

application.yml添加Eureka配置

server:  port: 8001mybatis:  type-aliases-package: com.qing.springcloud.pojo  config-location: classpath:mybatis/mybatis-config.xml  mapper-locations: classpath:mybatis/mapper/*.xml# 开启驼峰#  configuration:#    map-underscore-to-camel-case: truespring:  application:    name: springcloud-provider-dept  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: org.gjt.mm.mysql.Driver    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false    username: root    password: 123456# Eurekaeureka:  client:    service-url:      defaultZone: http://localhost:7001/eureka/ # 使用Eureka服务端配置的注册url

源码:
image.png

启动类中,添加开启Eureka服务注解

package com.qing.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/** * 启动类 */@EnableEurekaClient // 在服务启动后自动注册到Eureka中@SpringBootApplicationpublic class DeptProvider_8001 {    public static void main(String[] args) {        SpringApplication.run(DeptProvider_8001.class, args);    }}

启动测试

注:先启动Eureka服务端,再启动服务提供者
image.png
image.png
image.png
image.png

完善Eureka监控信息 Actuator

pom.xml添加依赖

<!--完善Eureka监控信息 actuator--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency>
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>springcloud</artifactId>        <groupId>com.qing</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>    <artifactId>springcloud-provider-dept-8001</artifactId>    <properties>        <maven.compiler.source>8</maven.compiler.source>        <maven.compiler.target>8</maven.compiler.target>    </properties>    <dependencies>        <!--springcloud-api模块,实体类-->        <dependency>            <groupId>com.qing</groupId>            <artifactId>springcloud-api</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>        </dependency>        <dependency>            <groupId>ch.qos.logback</groupId>            <artifactId>logback-core</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-test</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!--jetty-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jetty</artifactId>        </dependency>        <!--热部署-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>        </dependency>        <!--服务提供者使用eureka,eureka服务端使用eureka-server-->        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-eureka</artifactId>            <version>1.4.6.RELEASE</version>        </dependency>        <!--完善Eureka监控信息 actuator-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>    </dependencies></project>

application.yml配置:监控信息 actuator-info

server:  port: 8001mybatis:  type-aliases-package: com.qing.springcloud.pojo  config-location: classpath:mybatis/mybatis-config.xml  mapper-locations: classpath:mybatis/mapper/*.xml# 开启驼峰#  configuration:#    map-underscore-to-camel-case: truespring:  application:    name: springcloud-provider-dept  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: org.gjt.mm.mysql.Driver    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false    username: root    password: 123456# Eurekaeureka:  client:    service-url:      defaultZone: http://localhost:7001/eureka/ # 使用Eureka服务端配置的注册url# 监控信息 actuator-info配置info:  app.name: qing-springcloud  company.name: 清风阁

开启测试

image.png
配置前:
image.png
配置后:
image.png

application.yml配置:修改Eureka监控页面上服务默认描述

server:  port: 8001mybatis:  type-aliases-package: com.qing.springcloud.pojo  config-location: classpath:mybatis/mybatis-config.xml  mapper-locations: classpath:mybatis/mapper/*.xml# 开启驼峰#  configuration:#    map-underscore-to-camel-case: truespring:  application:    name: springcloud-provider-dept  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driver-class-name: org.gjt.mm.mysql.Driver    url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false    username: root    password: 123456# Eurekaeureka:  client:    service-url:      defaultZone: http://localhost:7001/eureka/ # 使用Eureka服务端配置的注册url  instance:    instance-id: springcloud-provider-dept-zdy # 修改Eureka监控页面上服务默认描述# 监控信息 actuator-info配置info:  app.name: qing-springcloud  company.name: 清风阁

修改前:
image.png
修改后:
image.png

服务发现:获取其他微服务信息

编写代码

package com.qing.springcloud.controller;import com.qing.springcloud.pojo.Dept;import com.qing.springcloud.service.DeptService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * 提供服务 */@RestControllerpublic class DeptController {    @Autowired    private DeptService deptService;    @Autowired    private DiscoveryClient client;    @PostMapping("/dept/add")    public boolean add(Dept dept) {        return deptService.add(dept);    }    @GetMapping("/dept/get/{id}")    public Dept get(@PathVariable("id") Long id) {        return deptService.queryById(id);    }    @GetMapping("/dept/listAll")    public List<Dept> listAll() {        return deptService.queryAll();    }    @GetMapping("/dept/discovery")    public Object discovery() {        // 获取微服务列表的清单        List<String> services = client.getServices();        System.out.println("discovery=>services:" + services);        // 得到一个具体的微服务信息,通过微服务的applicationName获取        List<ServiceInstance> instances = client.getInstances("springcloud-provider-dept");        for (ServiceInstance instance : instances) {            System.out.println(                    "serviceId=》" + instance.getServiceId() + "\n"                    + "host=》" + instance.getHost() + "\n"                    + "port=》" + instance.getPort() + "\n"                    + "uri=》" + instance.getUri() + "\n"                    + "instanceId=》" + instance.getInstanceId() + "\n"            );        }        return this.client;    }}

启动类,添加开启服务发现的注解

package com.qing.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/** * 启动类 */@EnableDiscoveryClient // 开启服务发现@EnableEurekaClient // 在服务启动后自动注册到Eureka中@SpringBootApplicationpublic class DeptProvider_8001 {    public static void main(String[] args) {        SpringApplication.run(DeptProvider_8001.class, args);    }}

启动测试

image.png
image.png

自我保护机制

image.png

posted @ 2022-03-22 09:27 清风(学习-踏实) 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员