微服务---Eureka注册中心

news2024/11/17 23:39:08

目录

一、服务中的提供者与消费者

二、Eureka工作流程

三、搭建Eureka服务

四、服务拉取

五、总结

        1.搭建EurekaServer

        2.服务注册

        3.服务发现


一、服务中的提供者与消费者

        服务提供者:一次业务中,被其他微服务调用的服务。即提供接口给其他微服务。

        服务消费者:一次业务中,调用其他微服务的服务。即调用其他微服务提供的接口。

二、Eureka工作流程

        我们在服务调用会出现一些问题,比如服务消费者该如何获取服务提供者的地址信息?如果有多个服务提供者,消费者该如何选择?消费者如何得知服务提供者的健康状态?

        Eureka的工作流程:

        Eureka分为服务端和客户端,服务端主要是用作注册中心,客户端用于放置服务消费者和服务提供者。

        首先,Eureka注册中心首先将服务端的所有服务提供者和服务消费者注册并记录起来,但是会根据类型进行区分,这一步就是完成了登记注册功能。

        第二步,服务消费者要想调用服务提供者提供的接口,就要先访问注册中心,从注册中心中拉取所有的服务提供者然后通过负载均衡选择一个服务提供者,然后就要进行远程调用服务提供者的接口。

        那么,消费者如何得知服务提供者的健康状态?

        其实,服务提供者会对注册中心进行心跳续约的策略,要是有某些时间注册中心接受不到服务提供者的心跳提示,即他不存活了,就可以判断其已死亡,一次删除其记录,服务消费者也不会再查询到。

        消费者该如何获取服务提供者具体信息?
                服务提供者启动时向eureka注册自己的信息,eureka保存这些信息,消费者根据服务名称向eureka拉取提供者信息

        如果有多个服务提供者,消费者该如何选择?
                服务消费者利用负载均衡算法,从服务列表中挑选一个消费者

        如何感知服务提供者健康状态?
                服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态,eureka会更新记录服务列表信息,心跳不正常会被剔除,消费者就可以拉取到最新的信息。

三、搭建Eureka服务

        首先,我们创建一个普通Javamaven项目,作为父工程:

        可以将创建好的项目中的src目录删除,因为我们并不会在在父工程中编写代码逻辑,只作为父工程处理。

    

        然后在父工程中创建新模块(springboot):

        相同思路,创建一个order-service和eureka-server(这个选依赖的时候,选择Eureka Server)。

        创建后的项目目录:

       依赖信息:

        在eureka-server的启动类上加上注解:

        在eureka-server中创建资源文件夹,并配置application.yaml:

server:
  port: 12211 #端口号
spring:
  application:
    name: eurekaserver #eureka的服务名称
eureka:
  service-url: #eureka的地址信息
      defaultZone: http://localhost:12211/eureka
  client:
    register-with-eureka: false # 表示不向注册中心注册
    fetch-registry: false # 由于注册中心的职责就是维护服务实例,所以它不需要去检索服务

        启动启动类,并访问地址:localhost:12211

        从上面的红色区域,我们就能看到,注册到eureka中的配置。

        对于eureka-server的配置:我们总体就有三个步骤:

        1.引入依赖。2.加注解。3.配置文件。

        接下来,我们进行注册user-service和order-service:

        两个步骤操作一样,因此,只展示其中一个:

        引入依赖:

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

        配置application.yaml:

server:
  port: 8081 #端口号
spring:
  application:
    name: orderservice #eureka的服务名称
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://localhost:12211/eureka

        然后启动即可:

        再次访问:

        注册的实例都已经配置上了

        另外,我们可以将user-service多次启动,模拟多实例部署,但为了避免端口冲突,需要修改端口设置:

四、服务拉取

        基于上述配置,我们通过order-service通过调用user-service来完成获取用户信息的功能。

        首先,在order-service的启动类中加上一个bean,加上@LoadBlanced用于指示负载均衡:

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

        然后我们在order-service中配置一个controller:

package com.order.orderservice.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
public class MyController {
    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/getOrder")
    @ResponseBody
    public String getOrder(){
        String url="http://userservice/getUser";
        String s = restTemplate.getForObject(url, String.class);
        return "成功得到用户"+s;
    }
}

        在application.yaml中添加配置:

server:
  port: 8081 #端口号
spring:
  application:
    name: orderservice #eureka的服务名称
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://localhost:12211/eureka
http:
  maxTotal: 100         #最大连接数
  defaultMaxPerRoute: 20  #并发数
  connectTimeout: 1000   #创建连接的最长时间
  connectionRequestTimeout: 500  #从连接池中获取到连接的最长时间
  socketTimeout: 10000 #数据传输的最长时间
  staleConnectionCheckEnabled: true  #提交请求前测试连接是否可用
  validateAfterInactivity: 3000000   #可用空闲连接过期时间,重用空闲连接时会先检查是否空闲时间超过这个时间,如果超过,释放socket重新建立

        再在user-service中写一个controller和对应的方法:

package com.user.userservice.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("/getUser")
    @ResponseBody
    public String getUser(){
        return "张三";
    }
}

        通过调用order-service中的请求,order-service再通过注册中心请求user-service中的相关内容,即可获取。

        心细的人就会发现,我们写URL的时候并没有指明端口号,而是给出的服务名称,因为这些服务都是注册到注册中心的,因此,我们可以直接用名称来代替。

五、总结

        1.搭建EurekaServer

                引入eureka-server依赖

                添加@EnableEurekaServer注解

                在application.yml中配置eureka地址


        2.服务注册

                引入eureka-client依赖

                在application.yml中配置eureka地址


        3.服务发现


                引入eureka-client依赖

                在application.yml中配置eureka地址

                给RestTemplate添加@LoadBalanced注解

                用服务提供者的服务名称远程调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode HOT150

55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1 …

(十五)【Jmeter】取样器(Sampler)之HTTP请求

简述 操作路径如下: HTTP请求 (HTTP Sampler): 作用:模拟发送HTTP请求并获取响应。配置:设置URL、请求方法、请求参数等参数。使用场景:测试Web应用程序的HTTP接口性能。优点:支持多种HTTP方法和请求参数,适用于大多数Web应用程序测试。缺点:功能较为基础,对于复杂…

STL空间配置器

参考《STL源码剖析-侯捷》一书 (SGI版本STL) 前置 六大组件 空间配置器实现 SGI版本的空间配置器有两个&#xff0c;一个名为allocator&#xff0c;一个名为alloc。前者符合部分标准&#xff0c;但效率不好&#xff0c;只是对operator new和operator delete进行了封装&#…

【Java EE初阶二十九】Linux 系统的学习

当前写的博客系统程序,只是部署在咱们自己的电脑上,其他用户是无法直接访问的.由于 NAT 机制的存在,导致了IP 地址就被分成了 内网 IP 和 外网 IP. 云服务器,包括公司中使用专用服务器,一般都是 Linux 系统&#xff0c;这个系统的使用和 Windows 差异很大.(通过命令行来操作的系…

企业有多套系统需要集成,如何高效率实施项目?

企业有多套系统需要集成&#xff0c;如何解决&#xff1f; 许多企业为了提升业务效率、优化管理流程以及实现数据驱动决策&#xff0c;纷纷引入了多套信息系统。这些系统可能包括ERP&#xff08;企业资源计划&#xff09;、CRM&#xff08;客户关系管理&#xff09;、SCM&#…

时间序列分析技巧(一):根据ACF、PACF进行AR、MA、ARMA模型选择

程序员如何选择职业赛道&#xff1f; &#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#…

Linux网络内核基础框架

本文了解的具体内容与核心 TCP/IP 协议体系 应用层&#xff1a;为网络用户提供各种服务&#xff0c;例如电子邮件、文件传输等。表示层&#xff1a;为不同主机间的通信提供统一的数据表示形式。会话层&#xff1a;负责信息传输的组织和协调&#xff0c;管理进程会话过程。传输层…

Spark 核心API

核心 API spark core API 指的是 spark 预定义好的算子。无论是 spark streaming 或者 Spark SQL 都是基于这些最基础的 API 构建起来的。理解这些核心 API 也是写出高效 Spark 代码的基础。 Transformation 转化类的算子是最多的&#xff0c;学会使用这些算子就应付多数的数…

惊艳!AI助力,图像放大不再模糊!

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f3e1; 演示环境 &#x1f3e1;&#x1f4d2; 使用方法/运行效果 &#x1f4d2;&#x1f48b; 效果演示 &#x1f388; 获取方式 &#x1f388;⚓️ 相关链接 ⚓️ &#x1f4d6; 介绍 &#x1f4d6; 在数字时代&#xff0c;图…

【Godot 4.2】Tree控件与TreeItem完全解析

概述 本篇是控件完全解析系列之一&#xff0c;主要总结一下Tree控件与TreeItem的使用。 Tree控件是一个非常强大的控件&#xff0c;尤其是在编写一些相关的程序或编辑器插件时&#xff0c;非常适合展示树形组织的节点型数据。 本篇将从简单的添加根节点&#xff0c;根节点子…

低通滤波器(SMART PLC双线性变换法)

低通滤波器的详细介绍可以参考信号处理专栏,常用链接如下: 1、双线性变换+欧拉后向差分 https://rxxw-control.blog.csdn.net/article/details/128586285https://rxxw-control.blog.csdn.net/article/details/1285862852、博途PLC一阶低通滤波器 https://rxxw-control.blo…

设计模式学习笔记(二):工厂方法模式

一、定义 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方法。工厂方法模式定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟…

大语言模型系列-GPT-3.5(ChatGPT)

文章目录 前言一、GPT-3.5的创新点二、GPT-3.5的训练流程SFT数据集RM数据集PPO数据集 三、ChatGPT的诞生总结 前言 《Training language models to follow instructions with human feedback&#xff0c;2022》 前文提到了GPT-3的缺点&#xff0c;其中最大的问题是&#xff1…

C++ 11 新特性 override和final

一.override和final介绍 在C11中&#xff0c;override和final是两个用于支持继承和多态的重要关键字。它们的具体作用如下&#xff1a; override&#xff1a;这个关键字用于派生类中&#xff0c;以确保虚函数的正确重写。当一个派生类的函数被声明为override时&#xff0c;编译…

【Ubuntu 20.04 / 22.04 LTS】最新 esp-matter SDK 软件编译环境搭建步骤

仓库链接&#xff1a;esp-matter SDK官方软件说明&#xff1a;ESP Matter Programming Guide官方参考文档&#xff1a;使用 Matter-SDK 快速搭建 Matter 环境 (Linux) 环境要求 Ubuntu 20.04 或 Ubuntu22.04网络环境支持访问 Gihub 在安装 esp-matter SDK 软件编译环境之前&a…

基于C++中netCDF库读取.nc数据时的一些坑

本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时&#xff0c;出现数据无法读取、数据读取错误、无法依据维度提取变量等情况的原因与解决方法。 最近&#xff0c;由于需要读取ERA5气象数据&#xff0c;因此使用C语言中的netCDF库读取.nc格式文件&#xff1b;这其中也是踩…

Docker基础教程 - 7 容器数据卷

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 7 容器数据卷 什么是容器卷&#xff0c;为什么需要容器卷&#xff1f; 我们在运行容器的时候&#xff0c;产生的数据都是保存在容器内部的。如果使用Docker来运行mysql容器&#xff0c;数据…

网络性能优化工具

网络优化是 IT 行业的一个重要方面&#xff0c;网络很复杂&#xff0c;管理员努力保持其平稳运行&#xff0c;然而&#xff0c;网络环境也是不可预测和动态的&#xff0c;任何未受监控的问题都可能像滚雪球一样变成中断。 优化网络性能需要引入&#xff1a; 新设备和应用程序…

Axure RP 10:让原型设计更快、更直观、更智能 mac版

Axure RP 10是一款强大的原型设计工具&#xff0c;它能够帮助设计师快速创建高保真、交互式的原型&#xff0c;从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能&#xff0c;已经成为了许多设计师的首 选工具。 Axure RP 10 for Mac版软件获取 首先&a…

还在使用 RESTful API ? 试一试 GraphQL

前言 GraphQL 和 RESTful API 是两种不同的网络通信接口设计理念&#xff0c;它们都可以用于客户端和服务器之间的数据交换&#xff0c;但是有着不同的工作方式和特点。 各自的特点以及优缺点 GraphQL&#xff1a; 特点&#xff1a; 查询语言: GraphQL 是一个查询语言&…