服务注册Eureka

目录

一、背景

1、概念

2、CAP 理论

3、常见的注册中心

二、Eureka

三、搭建 Eureka Server

1、搭建注册中心

四、服务注册

五、服务发现

六、Eureka 和 Zooper 的区别


一、背景

1、概念

远程调用就类似于一种通信

例如:当游客与景区之间进行通信(电话的方式),此时游客需要得到景区的电话,例如通过景区官网或者 114 查号台进行查询

那么 114 平台又是如何知道景区和电话的关系的呢?

景区当创建和修改的时候告诉 114 平台,由 114 平台对信息进行维护,游客就可以通过 114 查询电话,再向景区进行通讯

上述的解决方案同样也适用于微服务中

在微服务中,有两个角色:服务消费者和服务提供者

当订单服务调用商品服务,从中获取到对应的商品信息,此时订单服务就是服务消费者,商品服务就是服务提供者

服务提供者在启动之初,向平台进行注册,告诉平台 应用 和 IP 的关系,服务消费者可以从平台中根据应用获取到 IP 地址,然后根据 IP 地址进行远程调用

服务提供者和注册中心的关系我们称之为服务注册,服务消费者和注册中心的关系称为服务发现

我们来看一下这三种角色分别的作用

注意:服务提供者和服务消费者是相对的概念!!!

服务注册和服务发现的解释:


2、CAP 理论

CAP 理论是分布式系统中最基础、最关键的理论

我们来看一下 CAP 理论的图:

C:Consistency 一致性(此处的一致性指的是强一致性)

A:Availability 可用性 (对所有请求都有响应,这个响应可能是错误的数据)

P:Partition tolerance 分区容错性(在网络分区的情况下,我们的系统依然可以对外提供服务)

例如:银行利率下调,这个通知需要下发到各个银行的工作人员,通知下发需要一定的时间

一致性:在相同的时间点,所有的工作人员对客户讲的利率都是一样的

可用性:不论何时,所有的银行工作人员对客户咨询利率都是有回复的(回复也有可能是旧利率)

分区容错性:如果其中一个工作人员请假了,银行仍然可以对外提供服务

在分布式系统中,P 必须要保证,所以 C 和 A 只能二选一,因此我们的架构就是 AP / CP 架构

CP架构: 为了保证分布式系统对外的数据⼀致性, 于是选择不返回任何数据

AP架构: 为了保证分布式系统的可⽤性, 节点2返回V0版本的数据(即使这个数据不正确)

什么是强一致性?

数据库集群分为主库和从库

客户端向数据库集群发送了一个数据修改的请求,数据库集群需要向客户端进行响应,响应的时机分为以下两种:

1、主库接收到请求,并处理成功,此时数据还未完全同步到从库,随着时间的推移,主库和从库的数据最终达到一致性

2、主库接收到请求,并且所有从库数据同步成功时,数据库集群才进行响应 

强一致性:主库和从库,无论何时对外提供的服务都是一致的【第二种情况】

弱一致性:随着时间的推移,最终达到了一致性【第一种情况】


3、常见的注册中心


二、Eureka

官方文档: https://github.com/Netflix/eureka/wiki
Eureka主要分为两个部分:
Eureka Server: 作为注册中心Server端, 向微服务应用程序提供服务注册, 发现, 健康检查等能力.
Eureka Client: 服务提供者, 服务启动时, 会向Eureka Server 注册自己的信息(IP,端口,服务信息
等),Eureka Server 会存储这些信息

三、搭建 Eureka Server

1、搭建注册中心

(1)创建项目

(2)pom 中加入 Eureka 的依赖

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(3)配置文件增加 Eureka 相关配置

# Eureka相关配置
# Eureka 服务
server:
  port: 10010
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(4)启动类,开启 Eureka 功能

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class,args);
    }
}


四、服务注册

服务注册分为以下几步:

1、加入 Eureka 的依赖

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

2、修改配置信息

#Eureka Client
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka/
spring:
  application:
    name: product-service # 自定义名字

3、启动,测试


五、服务发现

服务发现分为以下几步:

1、加入 Eureka 依赖

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

2、修改配置信息

配置信息与上面的一样

3、修改远程调用代码

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    public OrderInfo selectOrderById(Integer orderId){
        OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
        // String url = "http://127.0.0.1:9090/product/"+orderInfo.getProductId();
        List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
        String uri = instances.get(0).getUri().toString();
        String url = uri + "/product/"+orderInfo.getProductId();
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        orderInfo.setProductInfo(productInfo);
        return orderInfo;
    }
}

4、启动,测试


六、Eureka 和 Zooper 的区别

相关推荐

  1. 10-Eureka-服务注册

    2024-07-09 21:50:05       12 阅读

最近更新

  1. Blazor Webassembly多标签页实现非iframe的实现

    2024-07-09 21:50:05       0 阅读
  2. Lianwei 安全周报|2024.07.22

    2024-07-09 21:50:05       0 阅读
  3. js弹出对话框

    2024-07-09 21:50:05       0 阅读
  4. 优先级策略:在Eureka中配置服务实例优先级

    2024-07-09 21:50:05       0 阅读
  5. L298N的输出电流与电压

    2024-07-09 21:50:05       0 阅读
  6. 基于vite + pnpm monorepo 实现一个UI组件库

    2024-07-09 21:50:05       0 阅读

热门阅读

  1. 部署LVS-DR群集

    2024-07-09 21:50:05       11 阅读
  2. WordPress禁止用户注册某些用户名

    2024-07-09 21:50:05       11 阅读
  3. go内存返还系统相关代码

    2024-07-09 21:50:05       10 阅读
  4. 如何使用 Puppeteer 避免机器人检测?

    2024-07-09 21:50:05       7 阅读
  5. 面试经典 150 题

    2024-07-09 21:50:05       8 阅读
  6. MySQL8之mysql-community-common的作用

    2024-07-09 21:50:05       7 阅读
  7. 机器学习综述

    2024-07-09 21:50:05       8 阅读