微服务学习 | Eureka注册中心

微服务远程调用

在order-service的OrderApplication中注册RestTemplate

在查询订单信息时,需要同时返回订单用户的信息,但是由于微服务的关系,用户信息需要在用户的微服务中去查询,故需要用到上面的RestTemplate来让订单的这个微服务去模拟浏览器去访问用户微服务暴露的接口去查询用户信息

故在订单这个微服务的service中,先调用订单的Mapper去查询订单信息,然后设置用户微服务的路由,利用RestTemplate提供的方法去根据这个路由访问用户微服务对外提供的接口,得到该订单对应的用户信息

调用查询订单信息的路由,查看101号订单,看到该订单的用户信息也被返回

总结

微服务调用方式

基于RestTemplate发起的http请求实现远程调用

http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可

服务调用出现的问题

服务消费者该如何获取服务提供者的地址信息?

如果有多个服务提供者,消费者该如何选择?

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

Eureka注册中心

Eureka的作用

消费者该如何获取服务提供者具体信息?

服务提供者启动时向eureka注册自己的信息

eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?

服务消费者利用负载均衡算法,从服务列表中挑选一个

消费者如何感知服务提供者健康状态?

服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态eureka会更新记录服务列表信息,心跳不正常会被剔除

消费者就可以拉取到最新的信息

总结

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

EurekaServer:服务端,注册中心

记录服务信息

心跳监控

EurekaClient: 客户端

Provider:服务提供者,例如案例中的user-service注册自己的信息到EurekaServer

每隔30秒向EurekaServer发送心跳

consumer:服务消费者,例如案例中的 order-service

根据服务名称从EurekaServer拉取服务列表

基于服务列表做负载均衡,选中一个微服务后发起远程调用

动手实践

1.搭建EurekaServer

2.将user-service、order-service都注册到eureka

3.在order-service中完成服务拉取,然后通过负载均衡挑选一

个服务,实现远程调用

搭建EurekaServer

搭建EurekaServer服务步骤如下:

1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖
2.编写启动类,添加@EnableEurekaServer注解

创建一个eureka-server的子模块,引入上面依赖,在主启动类上添加@EnableEurekaServer

3.添加application.yml文件,编写下面的配置:

在eureka-server的子模块的yml配置文件中,配置服务器名称以及地址

完成配置后,即可访问localhost:10086路由,访问Eureka的网页观察注册中心注册的服务实例

注册EurekaClient

将服务提供者user-service服务注册到EurekaServer步骤如下:

1.在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
2.在application.yml文件,编写下面的配置:

name为该微服务在注册中心中的服务名,defaultZone为服务中心的路由

按照上述方法,将每个微服务都注册到注册中心上

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

然后将这个服务也启动,就会发现注册中心中,名为userservice的服务有了两个实例,只是端口不一样。

完成服务拉取

在order-service完成服务拉取,服务拉取是基于服务名称获取服务列表,然后再对服务列表做负载均衡

1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
2.在服务消费者order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

然后,调用两次服务消费者order-service项目所给的查询订单接口

可以看到,8081端口的userservice查询了一次用户查询,8082端口的查询一次

总结

相关推荐
重生之后端学习1 分钟前
19. 删除链表的倒数第 N 个结点
java·数据结构·算法·leetcode·职场和发展
qq_12498707533 分钟前
基于小程序中医食谱推荐系统的设计(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·毕业设计·计算机毕业设计
Coder_Boy_6 分钟前
基于SpringAI的在线考试系统-阅卷评分模块时序图
java·人工智能·spring boot
澄澈青空~8 分钟前
畜牧业养牛技术与商家微服务解决方案
微服务·云原生·架构
sycmancia18 分钟前
C语言学习07——变量的作用域
c语言·学习
linweidong26 分钟前
C++大型系统中如何组织头文件和依赖树?
java·c++·架构
鹿角片ljp32 分钟前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode
pengweizhong36 分钟前
Dynamic‑SQL2 查询篇:MyBatis 增强利器,让 SQL 像写 Java 一样丝滑
java·sql·教程
Remember_99337 分钟前
【数据结构】深入理解优先级队列与堆:从原理到应用
java·数据结构·算法·spring·leetcode·maven·哈希算法
Leo July1 小时前
【Java】Spring Cloud 微服务生态全解析与企业级架构实战
java·spring cloud