基于RestTemplate的服务调用

简介: 基于RestTemplate的服务调用

简介

Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

前期准备

SpringCloud环境下创建用户服务订单服务两个模块,引入以下依赖:

<dependencies>
        <!--引入SpringBoot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入Consul依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!--引入健康状况监控依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--引入Lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

修改用户服务的配置文件,主要配置服务名、注册中心的信息。注册中心这里使用的是Consul,所以需要先把Consul服务端启动。

# 服务端口
server.port=8082
# 指定服务名称 唯一标识(不可以出现下划线)
spring.application.name=USERS
# 指定Consul服务端信息
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
# 关闭Consul了服务的健康检查[不推荐]
# spring.cloud.consul.discovery.register-health-check=false

修改订单服务配置文件

# 服务端口
server.port=8083
# 指定服务名称 唯一标识(不可以出现下划线)
spring.application.name=ORDERS
# 指定Consul服务端信息
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
# 关闭Consul了服务的健康检查[不推荐]
# spring.cloud.consul.discovery.register-health-check=false

在各自的启动类上面添加@EnableDiscoveryClient注解。

启动两个项目,之后访问Consul的Web页面可以看到两个服务已经成功的注册到了Consul

编写测试接口

在订单服务中编写一个获取订单号的测试接口

@RestController
@RequestMapping("/orders")
public class OrderController {
    @Value("${server.port}")
    private int port;
    /**
     * 获取我的订单
     */
    @GetMapping("/uId/{id}")
    public String getOrdersByUserId(@PathVariable("id") Integer id){
        return "20210726120030X"+id+"P"+port;
    }
}

private int port成员变量是方便搭建订单服务集群的时候看到效果,因为搭建集群需要使用多个端口要运行订单服务。

在用户服务中编写测试接口,接口中使用RestTemplate调用订单服务的接口

接口地址:http://localhost:8083/orders/uId/1
返回数据:20210726120030X1P8083
@Slf4j
@RestController
@RequestMapping("/users")
public class UserController {
    /**
     * 获取用户的订单
     */
    @GetMapping("/id/{id}/orders")
    public String getUserOrders(@PathVariable("id") Integer id){
  RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject("http://localhost:8083/orders/uId/"+id, String.class);
    }
}

之后在浏览器中访问http://localhost:8082/users/id/2/orders

返回数据:20210726120030X2P8083

不足之处

  1. RestTemplate是直接基于服务地址调用没有在服务注册中心获取服务。
  2. 没有办法完成服务的负载均衡以及心跳检测。
  3. 直接在代码中编写服务的地址以及请求,硬编码不利于维护。
目录
打赏
0
1
1
0
36
分享
相关文章
|
3月前
|
Feign远程调用
Feign远程调用
47 1
Feign远程调用
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
147 2
使用OpenFeign进行服务调用
本文档介绍如何在微服务架构中使用Spring Cloud的OpenFeign进行服务间的远程调用。首先,需在项目中引入OpenFeign及其负载均衡器依赖。接着,通过`@EnableFeignClients`启用Feign客户端功能,并定义客户端接口以声明远程服务调用逻辑。为确保启动类能正确扫描到这些接口,需指定`basePackages`属性。最后,演示了如何在购物车服务中利用Feign客户端接口调用商品服务,以实现跨服务的数据整合和查询。Feign通过动态代理机制简化了HTTP请求的发起过程,使服务间交互更为直观和便捷。
154 0
|
8月前
springCloud之服务调用RestTemplate、OpenFeign
springCloud之服务调用RestTemplate、OpenFeign
108 0
基于Ribbon+RestTemplate的服务调用
基于Ribbon+RestTemplate的服务调用
67 1
基于OpenFeign的服务调用
基于OpenFeign的服务调用
78 2
Feign调用
Feign调用
53 0
使用OpenFeign实现服务远程调用
当微服务架构日益普及,服务之间的远程调用变得至关重要。在这一背景下,OpenFeign作为一个强大的HTTP客户端框架简化了服务之间的远程通信。本文旨在介绍如何运用OpenFeign实现服务远程调用。
298 0
初识SpringCloud以及使用RestTemplate进行服务调用:服务调用初体验
初识SpringCloud以及使用RestTemplate进行服务调用:服务调用初体验
129 0

热门文章

最新文章