码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现



    在这里插入图片描述

    🐌个人主页: 🐌 叶落闲庭
    💨我的专栏:💨
    c语言
    数据结构
    javaEE
    操作系统
    Redis

    石可破也,而不可夺坚;丹可磨也,而不可夺赤。


    eureka

    • 一、Eureka原理分析
      • 1.1 服务调用出现的问题
      • 1.2 Eureka的作用
    • 二、 搭建Eureka
      • 2.1 创建项目
      • 2.2 编写启动类,添加@EnableEurekaServer注解
      • 2.3 添加application.yml的配置文件
      • 2.4 注册服务到Eureka
        • 2.4.1 在服务项目中引入eureka客户端依赖
        • 2.4.2 配置application.yml文件的信息
        • 2.4.3 模拟多实例部署
      • 2.5 服务发现
        • 2.5.1 在order-service完成服务拉取
        • 2.5.2 在order-service顶目的启动类Orderapplication中的RestTemplate添加负载均衡注解

    一、Eureka原理分析

    1.1 服务调用出现的问题

    当有两个服务,第一个服务需要远程调用第二个服务,采用的方式是发起一次HTTP请求,在之前的代码中是将服务提供者的ip和端口号硬编码到服务发起者中,采用这种方式会出现一些问题,在开发时,会有开发环境、测试环境、生产环境等,每次环境的变更可能会使服务的地址发生改变,采用硬编码就需要在环境发生变化时修改硬编码,然后重新编译打包,这样会很麻烦,同时,为了处理并发等问题,服务提供者可能会是一个集群,集群中每个服务提供者都有自己的地址,这样由于服务消费者的硬编码,将无法准确的得到想要的服务。

    1.2 Eureka的作用

    • 服务消费者该如何获取服务提供者的地址信息?
    • 如果有多个服务提供者,消费者该如何选择?
    • 消费者如何得知服务提供者的健康状态?

    eureka中有一个eureka-server(注册中心)和作为eureka-client(eureka客户端)的服务消费者和服务提供者,其中服务提供者在启动时会把自己的信息注册给eureka-server,每一个服务启动时都会进行注册操作,此时,若有服务消费者想要获取一个服务,就可以从eureka注册中心中找,服务消费者将自己需要的服务发给注册中心,注册中心就会返回对应的服务信息,但服务提供者可能是一个集群,那么注册中心返回的结果可能是多个,这时可以采用负载均衡的算法挑出一个,然后发起远程调用的请求。
    每个服务每隔30s都会向eureka-server(注册中心)发送一次心跳,表示当前服务正常运行,当eureka-server(注册中心)超过规定时间没有收到一个服务的心跳,会自动将这个服务移除,说明这个服务运行出现了问题。

    二、 搭建Eureka

    2.1 创建项目

    在现有项目中创建名为eureka-server(可以自定义名称)的子模块


    在这里插入图片描述


    • 选择Maven:

    在这里插入图片描述


    • 在pom.xml中添加Eureka的依赖,添加SpringBoot的启动依赖
    <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 编写启动类,添加@EnableEurekaServer注解

    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3 添加application.yml的配置文件

    server:
      port: 10086
    spring:
      application:
        name: eurekaserver  # eureka服务名称
    eureka:
      client:
        service-url:  # eureka地址信息
          defaultZone: http://localhost:10086/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.4 注册服务到Eureka

    • 将一个服务注册到EurekaServer步骤如下:

    2.4.1 在服务项目中引入eureka客户端依赖

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.4.2 配置application.yml文件的信息

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
      application:
        name: userservice # user服务的服务名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    eureka:
      client:
        service-url: #eureka地址信息
        	defaultZone: http://localhost:10086/eureka
    
    • 1
    • 2
    • 3
    • 4

    2.4.3 模拟多实例部署

    • 在idea中选择一个部署好Eureka的模块,右键选择Copy Configuration

    在这里插入图片描述

    • 自定义一个名字:
      在这里插入图片描述

    • 配置与原模块不同的端口号,点击Environment,在VM options中修改端口-Dserver.port=新端口号:

    在这里插入图片描述


    2.5 服务发现

    2.5.1 在order-service完成服务拉取

    • 服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
    • 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
            //2.利用RestTemplate发起http请求,查询用户
            String url = "http://userservice/user/" + order.getUserId();
    
    • 1
    • 2

    2.5.2 在order-service顶目的启动类Orderapplication中的RestTemplate添加负载均衡注解

        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    postgresql 内核源码分析 clog机制流程 commit log文件格式,分离的原因,分组优化及leader更新机制
    java毕业设计春之梦理发店管理Mybatis+系统+数据库+调试部署
    Chapter20: Machine Learning for In Silico ADMET Prediction
    一起走过的那些日子-2022年七夕
    linux操作Yum
    OSI网络七层模型和TCP/IP模型
    CleanMyMac X2024免费Mac电脑清理和优化工具
    如何解决前端上线之后用户页面不刷新的问题
    有效延缓痴呆症:延世大学发现梯度提升机模型能准确预测 BPSD 亚综合征
    MybatisPlus生成主键策略方法
  • 原文地址:https://blog.csdn.net/qq_64743563/article/details/133685250
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号