SpringCloud全家桶(四)——RestTemplate服务通信

四、RestTemplate服务通信

紧接着上面得微服务,我们使用两个服务进行调用演示,他们的调用关系应该是:浏览器 -> 订单服务 -> 用户服务,如下图:

image-20210509221244372

这里订单服务通过RestTemplate向用户服务发起调用,目的是要获取到用户服务返回的User对象,最终是需要浏览器获取到User。

1、RestTemplate介绍

微服务的通信协议主流的有RPC,Http,SpringCloud是基于Http Restful 风格 ,在Java中发起一个Http请求的方式很多,比如 Apache的HttpClient , OKHttp等等 。Spring为我们封装了一个基于Restful的使用非常简单的Http客户端工具 RestTemplate ,我们就用它来实订单服务和用户服务的通信。需要注意的是,RestTmplate本身不具备服务发现和负载均衡器的功能,我们本章的案例只是演示在订单服务中使用RestTemplate基于ip和端口的方式向用户服务发起调用,即:不走注册中心,不使用服务发现方式。

2、创建公共得模块

这里我使用UserTo作为需要传递信息得对象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserTo {
    private Long id;
    private String username;
    private String desc;
}

注意这里我们需要导入lombok得maven插件,可以直接将依赖导入到父模块中,我在这里只是导入到需要得模块中

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

3、将公共模块导入到用户、订单模块中

        <!--导入实体类-->
        <dependency>
            <groupId>cn.itsource</groupId>
            <artifactId>springcloud-common</artifactId>
            <version>${my.version}</version>
        </dependency>

4、修改用户服务

需要写controller返回UserTo对象

@RestController
public class UserController {
    @GetMapping("user/{id}")
    public UserTo getUserById(@PathVariable("id") Long id) {
        return new UserTo(id, "张三", "这是测试得内容");
    }
}

5、修改订单服务

这里不光要写controller还需要使用到RestTemplate向用户服务发送请求,也就在微服务之间进行通信

需要现在订单服务得主配置类OrderServerApplication1030加入以下内容

    //手动配置一个RestTemplate,Spring封装的一个基于Restful风格的http客户端工具,交给spring进行管理
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

再添加controller

@RestController
public class OrderController {
    //注入在配置类中定义得RestTemplate
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("order/{id}")
    public UserTo getUserToById(@PathVariable("id")Long id) {
        //目标得资源路径,是调用得user服务中controller得路径
        String url = "http://localhost:1020/user/" + id;
        //发送http请求
        return restTemplate.getForObject(url, UserTo.class);
    }
}

这里的url是用户服务获取UserTo资源的路径,通过RestTmplate发起Http调用,拿到UserTo对象后返回给浏览器。

6、测试

image-20210509222347972

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值