三,服务调用(待改)

本文介绍了Spring Cloud中如何使用RestTemplate和OpenFeign进行服务调用,并结合LoadBalancer实现客户端负载均衡。首先讲解了RestTemplate的基本用法,然后详细阐述了LoadBalancer的原理和配置,包括与RestTemplate的整合,以及LoadBalancerClient的使用。接着,文章介绍了OpenFeign的入门案例、超时配置、熔断器集成以及请求和响应压缩。最后提到了Feign的日志配置。
摘要由CSDN通过智能技术生成

写在前面的话:本文大部分都是抄写的,课堂的资料写的又特别好。目前的我还不知道怎么改写写出我的笔记。以后再改吧。
感谢你的路过,希望学生的笔记能给你一点微不足道的参考(2/100)
Java基础思维导图,完整Java体系的链接
微服务部分内容链接
大概十几个文章吧

3.1 RestTemplate简介

   RestTemplate是Spring Resources中一个访问第三方RESTful API接口的网络请求框架。RestTemplate的设计原则和其他的Spring Template(例如JdbcTemplate)类似,都是为了执行复杂任务提供了一个具有默认行为的简单方法。
   RestTemplate是用来消费REST服务的,所以RestTemplate的主要方法都与REST的HTTP协议的一些方法紧密相连,例如HEAD、GET、POST、PUT、DELETE、OPTIONS等方法,这些方法在RestTemplate类对应的方法为headForHeaders(),getForObject()、postForObject()、put()、delet()等。
   举例说明,在订单服务通过RestTemplate的getForObject方法调用支付服务,并且将调用结果反序列化成Payment对象,代码如下。

@GetMapping("/payment/{id}")
public ResponseEntity<Payment> getPaymentById(@PathVariable("id") Integer id) {
   
    String url = "http://localhost:9001/payment/" + id;

    List<ServiceInstance> serviceInstances = discoveryClient.getInstances("cloud-payment-service");
    ServiceInstance serviceInstance = serviceInstances.get(0);
    url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/payment/" + id;


    Payment payment = restTemplate.getForObject(url, Payment.class);
    return ResponseEntity.ok(payment);
}

   RestTemplate支持常见的Http协议请求方法,例如post, get, delete等,所以用RestTemplate很容易构建RESTfule API。上述案例结果返回json对象,使用jackson框架完成。

3.2 LoadBalancer负载均衡

   负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式。一种独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如Nginx。另一种是将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
   SpringCloud原有的客户端负载均衡方案Ribbon已经被废弃,取而代之的是SpringCloud LoadBalancer,LoadBalancer是Spring Cloud Commons的一个子项目,他属于上述的第二种方式,是将负载均衡逻辑封装到客户端中,并且运行在客户端的进程里。
   在Spring Cloud构件微服务系统中,LoadBalancer作为服务消费者的负载均衡器,有两种使用方式,一种是和RestTemplate相结合,另一种是和Feign相结合,Feign已经默认集成了LoadBalancer,关于Feign下一章讲解。

3.2.1 LoadBalancer整合RestTemplate

在支付微服务工程中进行如下更改。
1.配置文件
   在application.yml配置文件中,使用spel指定端口,表示存在port参数使用port参数,不存在使用默认9001端口, 启动支付服务时,可以通过指定-Dport=9000,指定支付服务使用不同端口启动,具体参考后面内容。

server:
  port: ${
   port:9001}

2.PaymentController
   在提供支付服务时,把端口打印出来,方便查看测试效果。代码如下。

@RestController
@RequestMapping("/payment")
public class PaymentController {
   

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/{id}")
    public ResponseEntity<Payment> payment(@PathVariable("id") Integer id) {
   
        Payment payment = new Payment(id, "支付成功,服务端口=" + serverPort
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值