首页 > 其他分享 >微服务 – Spring Cloud – Eureka - RestTemplate和@LoadBalanced 实现服务发现调用(http)

微服务 – Spring Cloud – Eureka - RestTemplate和@LoadBalanced 实现服务发现调用(http)

时间:2023-06-20 23:01:06浏览次数:48  
标签:服务 LoadBalanced Spring RestTemplate Eureka public payment

背景:

  • 服务注册用的是 Eureka集群。

  • 服务调用用的是注解 @LoadBalanced 和 RestTemplate

  • 服务数量两个: order服务 和 pyment服务 (order服务是调用者。 payment 服务是被调用者

  1. 首先将 order服务 和 payment服务注册 Eureka集群中。通过order调用 payment服务

  2. Eureka集群 的搭建 和 rder服务 和 payment服务注册 Eureka集群中 可以查看上一篇文章,有详细的步骤。

  3. order服务调用payment服务用的http方式。用的是 RestTemplate.后续会使用RPC方式

实现代码

整合<font color="red">Ribbon</font>,引入依赖。在eureka依赖中,已经潜入了 <font color="red">Ribbon</font>

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

配置文件 ApplicationContextConfig.java

RestTemplate 可以结合 Eureka 来动态发现服务并进行负载均衡的调用。

修改 RestTemplate 的配置,增加能够让 RestTemplate 具备负载均衡能力的注解 @LoadBalanced

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}

控制器 OrderController.java

CLOUD-PAYMENT-SERVICE 为payment服务注册到 Eureka集群中的服务名。

@RestController
public class OrderController {

    private static final String PROVIDER_URL = "http://CLOUD-PAYMENT-SERVICE";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/create/payment")
    public CommonResult<Payment> create(Payment payment) {
        return restTemplate.postForObject(PROVIDER_URL + "/payment/create", payment, CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PROVIDER_URL + "/payment/get/"+id, CommonResult.class);
    }

}

@LoadBalanced

@LoadBalanced 采用的是轮训的方式进行服务调用。

为什了加了 @LoadBalanced 就可用通过 Eureka集群中的服务名称,并可以实现负载均衡呢?

因为 Spring Cloud 给我们做了大量的底层工作,因为它将这些都封装好了。

这里主要的逻辑就是给 RestTemplate 增加拦截器,在请求之前对请求的地址进行替换,或者根据具体的负载策略选择服务地址,然后再去调用。

标签:服务,LoadBalanced,Spring,RestTemplate,Eureka,public,payment
From: https://blog.51cto.com/u_15524534/6525856

相关文章

  • 3、SpringMVC
    1、简介1.1、mvc 1.2、SpringMVC基于原生的Servlet 2、使用引用......
  • 七、Spring Cloud Alibaba Sentinel简介
    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。一、特性丰富......
  • 微服务 - Spring Cloud - Eureka Server单机和集群搭建、单机服务注册和集群服务注册
    Eureka服务管理Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能Eureka服务注册与发现Eur......
  • SpringBoot学习笔记
    SpringBoot学习笔记学习资料分享,一定要点!!!示例代码跳转链接无效,查看完整笔记点击:https://gitee.com/pingWurth/study-notes/blob/master/springboot/spring-boot-demo/SpringBoot学习笔记.md官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/index......
  • Springboot web,三层架构, IOC&DI 使用总结2023
    Springbootweb,三层架构,IOC&DI使用总结2023一.spring.io全家桶springbootspringframework基础框架,配置繁琐,入门难度大--》springbootspringcloudspringsecurityspringdataspring发展到今天是一个生态圈,提供了若干个子项目,每个子项目用于完成特定的功能。二.sp......
  • Springboot实现WebSocket
    一、什么是webSocketWebSocket是HTML5下一种新的协议(Websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,WebSocket是一个持久化的协议。二、修改配置文件在application.properties,修改内容为:server.port=......
  • Spring依赖注入(三) - 注入来源
    Spring依赖注入来源上一章中,我们在第三步的代码分析中可看到,在进行注入的依赖查找的时候,查找来源会从如下几个方式去查找:• 1、先看注入是否是外部化配置,如果是,则注入(@Value的方式)• 2、遍历看注入的对象是否是resolvableDependencies中包含的对象,如果是则返回(非Spring容器管理的......
  • 5步带你玩转SpringBoot自定义自动配置那些知识点
    目前SpringBoot框架真的深受广大开发者喜爱,毕竟它最大的特点就是:快速构建基于Spring的应用程序的框架,而且它提供了各种默认的功能和配置,可以让开发者快速搭建应用程序的基础结构。但是,当我们需要自定义一些配置时,我们就需要使用自定义自动配置。今天一定让大家深刻体验干货知识点......
  • springboot+websocket简单使用
    一、引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.o......
  • springboot简易配置
    server:port:8089servlet:encoding:charset:UTF-8tomcat:uri-encoding:UTF-8spring:datasource:type:com.zaxxer.hikari.HikariDataSourcejdbc-url:jdbc:mysql://localhost:3306/mydb_base?serverTimezone=UTC&useUnicode=t......