微服务学习 | Eureka注册中心

微服务远程调用

在order-service的OrderApplication中注册RestTemplate

微服务学习 | Eureka注册中心_第1张图片

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

微服务学习 | Eureka注册中心_第2张图片

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

微服务学习 | Eureka注册中心_第3张图片

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

微服务学习 | Eureka注册中心_第4张图片

总结

微服务调用方式

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

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

服务调用出现的问题

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

微服务学习 | Eureka注册中心_第5张图片

Eureka注册中心

Eureka的作用

消费者该如何获取服务提供者具体信息?
服务提供者启动时向eureka注册自己的信息
eureka保存这些信息
消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?
服务消费者利用负载均衡算法,从服务列表中挑选一个

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

微服务学习 | Eureka注册中心_第6张图片

总结

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

EurekaServer:服务端,注册中心

记录服务信息
心跳监控

EurekaClient: 客户端

Provider:服务提供者,例如案例中的user-service注册自己的信息到EurekaServer
每隔30秒向EurekaServer发送心跳

consumer:服务消费者,例如案例中的 order-service
根据服务名称从EurekaServer拉取服务列表
基于服务列表做负载均衡,选中一个微服务后发起远程调用

动手实践

1.搭建EurekaServer

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

3.在order-service中完成服务拉取,然后通过负载均衡挑选一
个服务,实现远程调用

微服务学习 | Eureka注册中心_第7张图片

搭建EurekaServer

搭建EurekaServer服务步骤如下:

1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

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

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

微服务学习 | Eureka注册中心_第8张图片

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

微服务学习 | Eureka注册中心_第9张图片

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

微服务学习 | Eureka注册中心_第10张图片

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

微服务学习 | Eureka注册中心_第11张图片

注册EurekaClient

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

1.在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖

2.在application.yml文件,编写下面的配置:

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

微服务学习 | Eureka注册中心_第12张图片

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

微服务学习 | Eureka注册中心_第13张图片

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

微服务学习 | Eureka注册中心_第14张图片

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

微服务学习 | Eureka注册中心_第15张图片

完成服务拉取

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

1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:

2.在服务消费者order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

微服务学习 | Eureka注册中心_第16张图片

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

微服务学习 | Eureka注册中心_第17张图片微服务学习 | Eureka注册中心_第18张图片

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

微服务学习 | Eureka注册中心_第19张图片

微服务学习 | Eureka注册中心_第20张图片

总结

微服务学习 | Eureka注册中心_第21张图片

你可能感兴趣的:(微服务,微服务,学习,eureka,java,后端)