eureka的简单了解

1.什么是eureka

Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务治理

2.什么是服务治理

  • 管理服务与服务之间的依赖关系,

  • 实现服务发现和注册

3.什么是服务的注册和发现

  • 当服务器启动的时候,会把当前自己服务器的信息,比如服务地址通讯地址等以别名方式注册到注册中心

  • 另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用(还是要自己去访问)

  • 也就是提供方将自己注册到注册中心,消费方从注册中心获取提供方的

4.什么是心跳

心跳:表示一种连接检查机制(没30秒发送一次,90秒没有没有,认为你挂了)

5.什么是CAP

CAP指的是在一个分布式系统中:

Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)

CAP定理:三者不可同时获得,P一定要满足

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时

  • 可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求服务一直可用,而且是正常响应时间

  • 分区容错性(P):分区容错性,就是高可用性一个节点崩了,并不影响其它的节点,100个节点,挂了几个,不影响服务,越多机器越好

  • CA 满足的情况下,P不能满足的原因:数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足

  • CP 满足的情况下,A不能满足的原因:数据同步(C)需要时间, 机器数量也多(P),但是同步数据需要时间,所以不能再正常时间内响应,所以A就不满足

  • AP 满足的情况下,C不能满足的原因:机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足

6.eureka的使用

  1. 启动注册中心

  2. 服务提供方(被调用)启动的时候,将自己的信息注册到注册中心

  3. 有心跳检测,默认30秒一次,90秒没有,注册中心剔除信息

  4. 消费方定期从注册中心获取服务列表(30秒)调用者

  5. 调用的时候,获取服务信息方信息之后,自己调用

例子:

1.新建一个spring boot项目

2.父工程引入依赖

3.完成子模块eureka(注册中心)

4.完成子模块provider(服务提供者)

5.完成子模块consumer(消费者)

引入依赖:

复制代码
<properties>
        <java.version>1.8</java.version>
        <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
复制代码

完成eureka模块:

引入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

编写application.yml配置文件

复制代码
server:
  port: 7001
spring:
  application:
    name: cs-eureka
eureka:
  instance:
    # 地址 通常是域名
    hostname: localhost
  client:
    service-url: # 客户端与EurekaServer的交互地址,如果是集群,需要多个地址
      defaultZone: http://localhost:7001/eureka/
    register-with-eureka: false # 是不是将自己注册进eureka 默认 true
    fetch-registry: false # 自己就是服务,不需要从eurekaServer获取服务信息,默认true
复制代码

配置类添加@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer //开启服务
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

完成服务提供者:

引入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

编写application.yml配置文件

复制代码
spring:
application:
name: provider
server:
port: 8002
eureka:
client:
# eureka服务端的路劲
service-url:
defaultZone: http://localhost:7001/eureka/
# 如果不想将改服务注册进注册中心,一定要写成false
register-with-eureka: true
instance:
prefer-ip-address: true
复制代码

配置类添加@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient // 启动客户端
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}

ProviderController.java

复制代码
@RestController
@RequestMapping("/provider")
public class ProviderController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/port")
    public String getPort(){
        return "来自提供者consumer" + port;
    }

}
复制代码

完成服务消费者:

引入依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

编写application.yml配置文件

复制代码
spring:
application:
name: consumer
server:
port: 9001
eureka:
client:
# eureka服务端的路径,这个就是eureka模块设置的地址
service-url:
defaultZone: http://eureka1:7001/eureka/
# 是不是将自己注册进eureka 默认 true,所以这里可以省略不写
register-with-eureka: false
fetch-registry: false
复制代码

配置类添加@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient // 启动客户端
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}

 配置类注入RestTemplate

@Configuration
public class ConsumerConfig {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

ConsumerController.java

复制代码
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    //未在配置类或启动类注入会报红
    private final RestTemplate restTemplate;

    public ConsumerController(RestTemplate restTemplate, DiscoveryClient discoveryClient) {
        this.restTemplate = restTemplate;
    }

    // 调用consumer的方法,获取这个port 最常见的方式 http调用,比如 httpClient
    @RequestMapping("/port")
    public String getPort() {
        return restTemplate.getForObject("http://localhost:8002/provider/port", String.class);
    }
复制代码

首先运行注册中心eureka模块

然后运行提供者provider模块

这个时候可以访问注册中心

可以看到有一个服务提供者注册了进来

最后运行服务消费者

posted @   时光里的少年  阅读(115)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示