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

在这里插入图片描述

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

在这里插入图片描述



一、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.hqwc.cn/news/640378.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产生骨肉冻干品控好不好?热榜TOP5生骨肉冻干分享

对于新手养猫人来说&#xff0c;进口生骨肉冻干的高价常常让人疑惑&#xff0c;为何它能在养猫达人中赢得如此高的声誉&#xff1f;与国产生骨肉冻干相比&#xff0c;进口产品的价格高出数倍&#xff0c;那么这高昂的价格是否代表了其独特的价值&#xff0c;还是只是一个消费陷…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样&#xff0c;可以在配置路由的时候&#xff0c;定义路由的元信息(附加信息)&#xff1f;答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息&#xff0c;然后通过useRouteLoaderData 钩子…

力扣HOT100 - 94. 二叉树的中序遍历

解题思路&#xff1a; 递归 class Solution {List<Integer> list new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return list;}public void recur(TreeNode root) {if (root null) return;recur(root.left);lis…

最强开源大模型Meta LIama3抢先在线体验!

4月19日Facebook母公司Meta重磅推出了其迄今最强大的开源人工智能&#xff08;AI&#xff09;模型——Llama 3。模型分为两种规模&#xff1a;8B 和 70B 参数&#xff0c;每种规模都提供预训练基础版和指令调优版。最强开源大语言模型Meta LIama3可以在线体验啦&#xff01; G…

javaWeb宠物商店管理系统

摘 要 本系统是采用Java技术来构建的一个基于Web技术的B/S结构的宠物网站&#xff0c;该网站建立在Spring和Struts2框架之上&#xff0c;前台使用JSP作为开发语言&#xff0c;后台使用MySQL数据库管理系统对数据进行管理&#xff0c;开发环境选用MyEclipse&#xff0c;应用服务…

拿捏 顺序表(2) ----- 实现通讯录

目录 前言一. 通讯录功能要求二. 实现方法三. 代码汇总四. 效果展示总结 正文开始 前言 书接上文, 我们已经初步了解了线性表, 顺序表其实就是在数组的基础上增加了一些特有的功能, 那么顺序表有哪些应用呢? 下面我们一起使用顺序表实现通讯录的功能. 博客主页:酷酷学!!! …

JavaAgent的agent与attach

文章目录 简介agent与attachagentattach如何attachpom.xml 简介 javaagent是什么&#xff1f; 从名字agent也可以看出&#xff0c;是一种代理。 javaagent用来做什么&#xff1f; 本质上是对class的一种增强&#xff0c;用来实现一些通用功能&#xff0c;例如链路追踪等。 …

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…

HarmonyOS ArkUI实战开发-NAPI异步编程

笔者在前 5 小节里讲述了在 OpenHarmony 上通过 NAPI 的方式实现了 JS 调用 C的能力&#xff0c;但是这些实现都是同步的&#xff0c;本节笔者简单介绍一下 NAPI 的异步实现。 约定编程规范 ArkUI 开发框架对外提供的 API 命名是需遵守一定规范的&#xff0c;以 ohos.display…

【面试八股总结】Linux系统下的I/O多路复用

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 I/O多路复用是⼀种在单个线程或进程中处理多个输入和输出操作的机制。它允许单个进程同时监视多个文件描述符(通常是套接字)&#xff0c;一旦某个描述符就绪&#xff08;一般是读就绪或者写就绪&#xff09;&#xff0c;能够…

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者&#xff1a;无哲 引言 在构建现代数据和业务系统的过程中&#xff0c;可观测性已经变得至关重要&#xff0c;日志服务&#xff08;SLS&#xff09;为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务&#xff0c;并提供数据采集、加工、投递、分析、…

前端点击按钮触发复制文本

1. 效果展示&#xff1a; 点击复制小图标进行内容的复制 在这里我们先不考虑适用插件的情况&#xff0c;因为如果只是简单的复制&#xff0c;则不需要插件 2. 绑定事件 这里我们以vue为例子&#xff0c; 原生和react我后面补上 <i slot"prefix" class"i…