springCould中的Eureka-从小白开始【2】

news2024/12/29 14:19:49

目录

1.什么是Eureka ❤️❤️❤️

2. 组件❤️❤️❤️

3.单机Eureka配置❤️❤️❤️

4.服务8001服务入住eureka ❤️❤️❤️

5.消费端80入住到eureka ❤️❤️❤️

6.集群Eureka配置 ❤️❤️❤️

7.将Client发布到eureka集群上 ❤️❤️❤️

8.服务端8002集群搭建 ❤️❤️❤️

9.负载均衡 ❤️❤️❤️

10.actuator信息完善❤️❤️❤️

11.服务发现 ❤️❤️❤️


1.什么是Eureka ❤️❤️❤️

Eureka是一个开源的服务发现框架,由Netflix公司开发。它可以用于在分布式系统中,自动注册、发现和管理服务实例。Eureka通过使用RESTful API,使得服务实例可以通过名称进行查找,从而实现了服务之间的通信。Eureka还具有高可用性和故障恢复机制,可以有效地处理服务注册和发现的问题。

2. 组件❤️❤️❤️

Eureka包含两个组件:Eureka ServerEureka Client

  • Eureka Server:提供服务注册服务各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
  • EurekaClient:通过注册中心进行访问是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳, EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

3.单机Eureka配置❤️❤️❤️

1.创建模块

在父工程下创建子模块

注:jdk版本,maven版本

2.添加pom依赖

用到通用模块,导入依赖

引入eureka服务端依赖

 <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--通用配置-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--引入自己的api-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

3.创建主程序类

@EnableEurekaServer:可以将一个普通的 Spring Boot 应用转变为 Eureka 服务器,用于注册和发现其他微服务实例

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

4.改yml

1.修改端口号

2.添加eureka配置

3.注意yml格式

server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: localhost
  client:
    #false:表示不向注册中心注册自己
    register-with-eureka: false
    #false:表示自己就是注册中心,维护服务,不需要检测
    fetch-registry: false
    #设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}

5.测试 

访问配置的地址+ip成功看到eureka界面

4.服务8001服务入住eureka ❤️❤️❤️

1.改pom

添加eureka客户端依赖

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

2.改yml

添加入住eureka的配置信息

eureka:
  client:
    #表示将自己注册到EurekaServer
    register-with-eureka: true
    #是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    #注入eureka地址
    service-url:
      defaultZone: http://localhost:7001

3.改主启动类

@EnableEurekaClient:将当前应用作为Eureka客户端注册到Eureka服务器。

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class);
    }
}

 4.测试

启动8001服务端口,刷新浏览器页面,就会发现服务8001注册到eureka中

5.消费端80入住到eureka ❤️❤️❤️

1.改pom

服务端,消费端,在这里都是相对于eureka而言

因此消费端80相对于eureka也是Client端

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

2.改yml

1.配置服务名称

2.配置入住到eureka的信息

spring:
  application:
    name: cloud-consumer-order
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

3.改主启动类

添加@EnableEurekaClient:入住到eureka

@SpringBootApplication
@EnableEurekaClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class);
    }
}

4.测试

启动80服务端口,刷新浏览器页面,就会发现服务80注册到eureka中

 

6.集群Eureka配置 ❤️❤️❤️

1.创建模块

雷同7001模块,在创建模块7002,7003

注意:jdk版本,maven版本

2.添加pom依赖

7001,7002,7003都是服务端,所以依赖相同


    <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--通用配置-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--引入自己的api-->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

3.修改映射文件

只有一台机器,创建三个域名指向同一个ip模拟三台机器

地址:C:\Windows\System32\drivers\etc下面的hosts

4.修改yml文件

以7001为例

1.添加hostname(hosts里配置的)

2.service-url 在另外两个eureka注入自己

注意:中间用逗号隔开,不要用空格

server:
  port: 7001

eureka:
  instance:
    #eureka服务端的实例名称
    hostname: eureka7001.com
  client:
    #false:表示不向注册中心注册自己
    register-with-eureka: false
    #false:表示自己就是注册中心,维护服务,不需要检测
    fetch-registry: false
    #设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址。
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

5.添加主启动类

 注意添加@EnableEureServer

@SpringBootApplication
@EnableEurekaServer//代表eureka服务端注册中心
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class);
    }
}

6.测试

分别启动三台eureka,并浏览器访问 

7.将Client发布到eureka集群上❤️❤️❤️ 

7.1.将8001发布到eureka集群上 

只需要在yml文件中,将其eureka的注册地址更改为多个即可

注:地址之间用逗号隔开,之间不能有空格

eureka:
  client:
    #表示将自己注册到EurekaServer
    register-with-eureka: true
    #是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    #注入eureka地址
    service-url:
      defaultZone: http://erureka7001:7001/eureka,http://erureka7002:7002/eureka,http://erureka7003:7003/eureka

7.2.将80发布到eureka集群上 

server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://erureka7001:7001/eureka,http://erureka7002:7002/eureka,http://erureka7003:7003/eureka

7.3使用@value标识服务端口 

在controller层使用@value标识端口号

@RestController
@RequestMapping("/payment")
@Slf4j
public class PaymentController {
    @Autowired
    private PaymentService paymentService;

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

}

7.4测试

启动eureka集群后,先启动8001(服务端相对于80)在启动80,刷新浏览器

可以看到:每台机器上都部署有其他eureka的信息,并且都有8001和80的注册信息

8.服务端8002集群搭建 ❤️❤️❤️

1.创建模块

创建和8001模块一样的模块,注意(如果拷贝的话很肯定识别错误)

2.添加pom依赖

添加和8001一样的pom依赖

3.修改yml文件

修改端口号8002,其余和8001一模一样

4.添加主起动类

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8002 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8002.class);
    }
}

5.测试

启动eureka集群后分别启动8001,8002;刷新浏览器可以发现一个应用程序有两个服务

9.负载均衡 ❤️❤️❤️

启动eureka集群后,在启动8001,8002服务端,最后启动80消费端。

但是80只能访问8001,因为我们在使用RestTemplate时,固定了访问地址

 public static final String PAYMENT_URL = "http://localhost:8001";
  •  使用负载均衡时,我们只告诉他访问的名称即可
public static final String PAYMENT_URL = "http://COULD-PAYMENT-SERIVCE";
  • 给RestTemplate赋予负载均衡的能力使用@LoadBalanced
@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced//赋予了RestTemplate负载均衡的能力
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

10.actuator信息完善❤️❤️❤️

如何修改IP地址 ,并显示IP端口

修改yml 

添加instance-id修改服务名称,prefer-ip-address:true:访问路径可显示ip 

eureka:
  client:
    #表示将自己注册到EurekaServer
    register-with-eureka: true
    #是否从EurekaServer抓取已有的配置,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetch-registry: true
    #注入eureka地址
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
  #修改服务名称    
  instance:
    instance-id: paymnet8002

11.服务发现 ❤️❤️❤️

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

1.在controller添加DiscoveryClient

装配DiscoveryClient对象

注意:import org.springframework.cloud.client.discovery.DiscoveryClient;


    @Autowired
    private DiscoveryClient discoveryClient;

2.编写代码

   @GetMapping("/discovery")
    public Object discovery() {
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            log.info("列表中有:" + element);
        }
        List<ServiceInstance> instances = discoveryClient.getInstances("COULD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
            log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
        }
        return this.discoveryClient;
    }

3.在主启动类添加@EnableDiscoveryClient

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class);
    }
}

 

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

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

相关文章

OpenHarmony 启动流程优化

目前rk3568的开机时间有21s&#xff0c;统计的是关机后从按下 power 按键到显示锁屏的时间&#xff0c;当对openharmony的系统进行了裁剪子系统&#xff0c;系统app&#xff0c;禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其…

uniapp 导入ucharts图表插件 H5项目, 使用echarts eopts配置

先下载ucharts H5示例源码&#xff1a; uCharts: 高性能跨平台图表库&#xff0c;支持H5、APP、小程序&#xff08;微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小程序、快手小程序、360小程序&#xff09;、Vue、Taro等更多支持canvas的框架平台&#…

MyBatis的运行原理!!!

MyBatis框架在操作数据库时&#xff0c;大体经过了8个步骤&#xff1a; 1.读取 MyBatis 配置文件&#xff1a;mybatis-config.xml 为 MyBatis 的全局配置文件&#xff0c;配置了 MyBatis 的运行环境等信息&#xff0c;例如数据库连接信息。 2.加载映射文件&#xff1a;映射文…

如何快速优化大数据量订单表

场景 本篇分享以前在广州一家互联网公司工作时遇到的状况及解决方案,这家公司有一个项目是SOA的架构,这个架构那几年是很流行的,哪怕是现在依然认为这个理念在当时比较先进。 当时的项目背景大概是这样,这家公司用的是某软提供的方案,项目已经运行3年多,整体稳定。 数据…

Pycharm中将画出的图以弹窗方式显示

Pycharm中将画出的图以弹窗方式显示 操作方法&#xff1a; File→ Setting → Tools → 取消Python Scientific 即可。 如下图所示。 然后就搞定了&#xff0c;结果如下。

Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

目录 一、ansible概述 1、简介 2、Ansible主要功能&#xff1a; 3、Ansible的另一个特点&#xff1a;所有模块都是幂等性 4、Ansible的优点&#xff1a; 5、Ansible的四大组件&#xff1a; 二、ansible环境部署&#xff1a; 1、环境&#xff1a; 2、安装ansible&#…

智能优化算法应用:基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于学校优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.…

学习——html基础

什么是HTML Hyper Text Markup Language (超文本标记语言) 标记又俗称标签(tag)&#xff0c;一般格式&#xff1a; 如 <h1></h1>标签里还可以有属性(Attribute)&#xff1a; <tagName Atrribute “value" /> 如 <meta charset"utf-8"…

长短期记忆(LSTM)神经网络-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编…

使用Httpclient来替代客户端的jsonp跨域解决方案

最近接手一个项目&#xff0c;新项目需要调用老项目的接口&#xff0c;但是老项目和新项目不再同一个域名下&#xff0c;所以必须进行跨域调用了&#xff0c;但是老项目又不能进行任何修改&#xff0c;所以jsonp也无法解决了&#xff0c;于是想到了使用了Httpclient来进行服务端…

测试工具Jmeter:界面介绍、核心选项说明、核心选项用途

本文章主要介绍Jmeter的界面布局&#xff0c;以及各个选项的功能和它们的用途。 JMeter基本原理是建立一个线程池&#xff0c;多线程运行取样器产生大量负载&#xff0c;在运行过程中通过断言来验证结果的正确性&#xff0c;通过监听器来记录测试结果。 1. Jmeter主界面 当我…

Linux 进程通信

文章目录 匿名管道匿名管道使用匿名管道原理匿名管道读写 命名管道命名管道使用命名管道特性 共享内存共享内存原理共享内存使用 补充说明 补充说明部分为相关函数和不太重要的概念介绍 匿名管道 匿名管道使用 使用方法一&#xff1a; 使用函数介绍&#xff1a; #include &…

Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程

为了解决国内开发者从 github 克隆 esp 相关仓库慢的问题&#xff0c;已将 esp-idf 和部分重要仓库及其关联的子模块镜像到了 jihu&#xff0c;这些仓库将自动从原始仓库进行同步。此篇博客用来阐述 Ubuntu18.04 上通过 jihu 镜像完成 ESP-IDF 编译环境搭建流程。 注&#xff1…

从零开始制作一个Douban图像下载器:Wt库的基础知识和操作指南

引言 欢迎来到本文&#xff0c;如果你希望从豆瓣下载海量的高清图像、学习使用现代C web应用程序框架Wt库开发web应用程序&#xff0c;或者了解如何利用代理IP和多线程技术提高爬虫效率和稳定性&#xff0c;那么你来对地方了。在接下来的内容中&#xff0c;我们将为你提供一个…

Springboot数据加密篇

一、密码加密 1.1Hash算法(MD5/SHA-512等) 哈希算法&#xff0c;又称摘要算法&#xff08;Digest&#xff09;&#xff0c;是一种将任意长度的输入通过散列函数变换成固定长度的输出的单向密码体制。这种映射的规则就是哈希算法&#xff0c;而通过原始数据映射之后得到的二进制…

2023中国品牌节金谱奖荣誉发布 酷开科技获颁OTT行业科技创新奖

11月17日—19日&#xff0c;以“复苏与腾飞”为主题的2023第十七届中国品牌节&#xff0c;在杭州市云栖小镇国际会展中心成功举行。在18日晚间的荣耀盛典上&#xff0c;“TopBrand 2023中国品牌节金谱奖”荣誉发布&#xff0c;酷开科技斩获OTT行业科技创新奖。 酷开科技作为OTT…

JavaWeb笔记之JavaWeb JDBC

//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库&#xff0c;需要手工建立连接&#xff0c;输入用户名和密码登录&#xff0c;编写 SQL 语句&#xff0c;点击执行&#xff0c;查看操作结果&#xff08;结果集或受影响行数&#xff09;。…

MySQL的增删改查(进阶)--上

1. 数据库约束 1.1 约束类型 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列&#xff08;或两个列多个列的结合&#xff09;有唯一标识&#xf…

3-10岁孩子数学发展里程碑

文章目录 3岁4岁5岁6-7岁&#xff08;1-2年级&#xff09;8-9岁&#xff08;3-4年级&#xff09;10岁&#xff08;5年级&#xff09; 当然&#xff0c;孩子的数学能力发展会因个体差异而有所不同&#xff0c;但以下是一个大致的指导&#xff0c;用来描述从3岁到10岁孩子在数学上…

HPM6750系列--第十一篇 Uart讲解(轮询模式)

一、目的 在介绍完GPIO的相关内容下一个必须介绍的就是uart了&#xff0c;因为串口一个主要用途就是用于调试信息打印。 HPM6750在uart的配置上也是相当炸裂&#xff0c;有17个串口&#xff1b;结合HPM6750的高主频高内存&#xff0c;完全可以作为一个串口服务器。 ​​​​​​…