微服务:Eureka原理实践:@EnableEurekaServer、@LoadBalanced

server/2024/9/23 11:15:45/

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

微服务:Eureka原理实践:@EnableEurekaServer、@LoadBalanced

    • 一、Eureka架构概述
    • Eureka的作用
    • 三、搭建EurekaServer(服务端)
      • 1.创建项目,引入依赖
      • 2.编写启动类
      • 3.添加配置信息
      • 4.访问Eureka管理界面
    • 四、搭建EurekaClient(客户端)
      • 1.信息注册:Provider(服务提供者)
        • ①引入依赖
        • ②添加配置信息
      • 2.信息注册:Consumer(服务消费者)
        • ①引入依赖
        • ②添加配置信息
    • 五、Eureka服务拉取(服务发现)
    • 六、小结



一、Eureka架构概述

Eureka架构中,有两类微服务角色:

  • EurekaServer —— 服务端,注册中心。
    • 记录服务;
    • 心跳监控;
  • EurekaClient —— 客户端。
    • Provider:服务提供者。
      • 注册自己的信息到EurekaServer;
      • 每隔30秒向EurekaServer发送心跳请求;
    • Consumer:服务消费者。
      • 根据服务名称从EurekaServer拉取服务列表。
      • 基于服务列表做负载均衡,选中一个微服务后发起远程调用。



Eureka的作用

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

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

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



三、搭建EurekaServer(服务端)


1.创建项目,引入依赖

创建项目,pom.xml文件中导入spring-cloud-starter-netflix-eureka-server依赖。

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

2.编写启动类

编写SpringBoot工程的启动类,添加上注解@EnableEurekaServer,以此开启Eureka服务。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer//重点,开启Eureka服务。
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

3.添加配置信息

在SpringBoot工程的application.yml配置文件中,添加以下配置信息。

server:port: 10086 # 服务端口
spring:application:name: eurekaserver # eureka的服务名称
eureka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka

4.访问Eureka管理界面

浏览器访问我们上一步配置的eureka的地址信息链接:http://127.0.0.1:10086/eureka,就能打开spring Eureka管理界面,查看EurekaServer的一些基本信息。

在这里插入图片描述




四、搭建EurekaClient(客户端)


1.信息注册:Provider(服务提供者)

①引入依赖

在服务提供者微服务pom.xml文件中引入spring-cloud-starter-netflix-eureka-client依赖

        <!--eureka客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

②添加配置信息

在服务提供者微服务的SpringBoot工程配置文件application.yml配置文件中,添加下述配置信息。

spring:application:  #eureka客户端 —— 服务提供者Provider的服务名称name: userserviceeureka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka

2.信息注册:Consumer(服务消费者)

①引入依赖

在服务消费者微服务pom.xml文件中引入spring-cloud-starter-netflix-eureka-client依赖

        <!--eureka客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

②添加配置信息

在服务消费者微服务的SpringBoot工程配置文件application.yml配置文件中,添加下述配置信息。

spring:application:  #eureka客户端 —— 服务消费者Consumer的服务名称name: orderserviceeureka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka

服务消费者与服务提供者的信息注册步骤基本一致…

即:无论是消费者还是提供者,只要引入eureka-client依赖,配置了eureka地址信息后,都可以完成注册。




五、Eureka服务拉取(服务发现)

  • 服务拉取:基于服务名称,获取服务列表,然后对服务列表做负载均衡,挑选一个服务进行使用。

  1. 修改服务消费者(order-service)的业务层组件,即:远程调用功能的组件代码中,修改访问的url地址,使用服务名来代替ip、端口
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.利用RestTemplate发起http请求,查询用户// 2.1.url路径//String url = "http://localhost:8081/user/" + order.getUserId();//使用服务提供者的服务名userservice代替ip、端口:String url = "http://userservice/user/" + order.getUserId();// 2.2.发送http请求,实现远程调用User user = restTemplate.getForObject(url, User.class);// 3.封装user到Orderorder.setUser(user);// 4.返回return order;}
}

重点在这里

        // 2.1.url路径//String url = "http://localhost:8081/user/" + order.getUserId();//使用服务提供者的服务名userservice代替ip、端口:String url = "http://userservice/user/" + order.getUserId();

  1. 在服务消费者(order-service)的启动类OrderApplication中,为Spring容器中的RestTemplate实例使用负载均衡算法,即:添加注解@LoadBalanced
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}/*** 创建RestTemplate并注入Spring容器*/@Bean@LoadBalanced//@LoadBalanced注解,实现负载均衡public RestTemplate restTemplate() {return new RestTemplate();}}

  1. 完成上述两部,就能做到根据服务名称从EurekaServer拉取服务列表,并做负载均衡算法,从列表中挑选一个服务使用!



六、小结

  • @EnableEurekaServer —— 使用在SpringBoot工程启动类上,可开启Eureka服务。
  • @LoadBalanced —— 使用在@Bean方法注入的RestTemplate实例上,用于实现负载均衡算法。

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/server/10076.html

相关文章

双核MCU中的数据共享与DPRAM的工作机制对比分析

目录 一、同构双核MCU中数据共享的机制 1.缓存一致性&#xff1a; 2.互斥锁&#xff1a; 3.缓存同步&#xff1a; 4.信号量/原子操作&#xff1a; 5.直接内存访问&#xff1a; 6.消息传递&#xff1a; 二、DPRAM中数据共享的机制及两者的区别 1.DPRAM中数据共享的机制…

Flume在大数据集群下的配置以及监控工具Ganglia的部署安装

前提&#xff1a;需要有三台虚拟机&#xff08;hadoop102,103,104&#xff09;配置好相关基础环境 安装 将安装包上传到/opt/software中 tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/修改 apache-flume-1.9.0-bin 的名称为 flume mv /opt/module/…

【第六章】集合类:List、Iterator迭代器

目录 1.集合类 1.1 什么是集合类 1.2 集合类的分类 2.Collection接口 3.List集合 3.1 ArrayList集合 3.2 LinkedList集合 3.3 ArrayList和LinkedList对比 3.4 创建List对象 4 Iterator接口 5 foreach循环 6 代码练习 1.集合类 1.1 什么是集合类 集合类就像一个容器&a…

Leetcode 1047:删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 import java.util.Stack;public…

代码随想录算法训练营Day6 | 242.有效的字母异位词 ●349. 两个数组的交集 ● 202. 快乐数● 1. 两数之和

基础&#xff1a; 1.哈希表是根据关键值进行直接访问的数据结构&#xff0c;时间复杂度是O(1)&#xff0c;也就是通过数组的索引下标&#xff0c;直接访问数组中的元素哈希表的作用就是用来快速判断一个元素是否出现在集合里。 2.常见的哈希结构&#xff1a; 数组set &#…

【LLM】向量知识库

文章目录 认识向量知识库向量Embeddings向量数据库向量数据库的作用向量数据库与传统数据库的区别 Embedding API使用公有Embedding API自定义一个Embeedding API 常见文本数据的预处理搭建并使用向量数据库思考向量数据库在LLM中的价值体现向量的妙用&#xff0c;可行&#xf…

linux入门到精通-第十一章-进程间通信(无名管道)

目录 参考概念**进程通信的目的&#xff1a;**Linux 操作系统支持的主要进程间通信的通信机制: 无名管道概述pipe函数建立无名管道父子进程使用无名管道通信 管道读写特点设置非阻塞的方法查看管道缓冲区命令查看管道缓冲区函数 参考 视频教程 概念 进程是一个独立的资源分配…

Ubuntu22.04.4 - Redis - 笔记

一、安装 sudo apt update sudo apt install redis-serverrootzheng:/etc# redis-cli --version redis-cli 6.0.16二、配置文件修改 配置文件地址 /etc/redis/redis.conf 1、开启远程访问 # 注释掉绑定地址#bind 127.0.0.1&#xff0c;让Redis可远程访问 # bind 127.0.0.1 …