【从零搭建后端基础设施系列(四)】-- web 服务骨架编写

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


首先,解释一下为什么要和thrift服务拆分出来。

  • 微服务的思想,将一个系统拆分成各个独立的服务,解耦开来,但是注意调用链路不宜过长。否则会影响性能和加大问题的排查难度。
  • web服务在整个前后端系统中,充当前端和后端的中间人,前端一般通过http请求到web服务,web服务再通过RPC调用thrift服务。

从零开发一个后端服务(三)–thrift 服务骨架编写一样,先创建一个空的maven工程,再创建模块,这么做的目的是方便管理,比如日后你想加个小模块,直接在这个工程新建一个模块即可。

一、创建springboot模块

选择组件的时候,要勾选web组件,一般选spring web starter,看下面解释,也说了,可以构建一个restful web service。
在这里插入图片描述
创建完成后如图
在这里插入图片描述
咋一看,好像和之前的thrift服务没有什么不同,不要急,等我把controller实现了就能发现不同了。

二、搭建controller层

@RestController
@RequestMapping("/calculate")
public class CalculateController {

    @GetMapping("/add/{num1}/{num2}")
    public Object add(@PathVariable("num1") double num1, @PathVariable("num2") double num2){
        return num1 + num2;
    }

    @GetMapping("/sub/{num1}/{num2}")
    public Object sub(@PathVariable("num1") double num1, @PathVariable("num2") double num2){
        return num1 - num2;
    }

    @GetMapping("/mul")
    public Object mul(@RequestParam("num1") double num1, @RequestParam("num2") double num2){
        return num1 * num2;
    }

    @GetMapping("/div")
    public Object div(@RequestParam("num1") double num1, @RequestParam("num2") double num2){
        return num1 / num2;
    }
}

在这里插入图片描述
搭完框架后,测试一下http请求是否正常,直接启动服务。然后用postman测试
1+2, localhost:8080/calculate/add/1/2
在这里插入图片描述
1-2, localhost:8080/calculate/sub/1/2
在这里插入图片描述
1*2, localhost:8080/calculate/mul?num1=1&num2=2
在这里插入图片描述
1/2, localhost:8080/calculate/div?num1=1&num2=2
在这里插入图片描述

测试结果正常。

三、调用thrift服务

引入min-system-core包

<dependency>
	<groupId>com.acme.service</groupId>
	<artifactId>min-system-core</artifactId>
	<version>1.0.0-SNAPSHOT</version>
</dependency>

修改后的controller代码如下

@RestController
@RequestMapping("/calculate")
public class CalculateController {

    @GetMapping("/add/{num1}/{num2}")
    public Object add(@PathVariable("num1") double num1, @PathVariable("num2") double num2) throws TException {
        return calculate(new Expression(OPERATE.ADD, num1, num2));
    }

    @GetMapping("/sub/{num1}/{num2}")
    public Object sub(@PathVariable("num1") double num1, @PathVariable("num2") double num2) throws TException {
        return calculate(new Expression(OPERATE.SUB, num1, num2));
    }

    @GetMapping("/mul")
    public Object mul(@RequestParam("num1") double num1, @RequestParam("num2") double num2) throws TException {
        return calculate(new Expression(OPERATE.MUL, num1, num2));
    }

    @GetMapping("/div")
    public Object div(@RequestParam("num1") double num1, @RequestParam("num2") double num2) throws TException {
        return calculate(new Expression(OPERATE.DIV, num1, num2));
    }

    private double calculate(Expression expression) throws TException {
        // 创建 TTransport
        TTransport transport = new TSocket("127.0.0.1", 8081, 2000);
        // 创建 TProtocol
        TProtocol protocol = new TBinaryProtocol(transport);

        // 创建客户端.
        TCalculate.Client client = new TCalculate.Client(protocol);

        // 打开 TTransport
        transport.open();

        // 调用服务方法
        ExpressionResult result = client.calculate(expression);
        transport.close();
        return result.getResult();
    }
}

测试一下是否正常,先启动thrift服务,端口不要是8080,改成其他的,因为Tomcat的默认端口是8080,这样会占用起不来。

启动thrift服务
在这里插入图片描述

启动web服务
在这里插入图片描述
postman测试正常,就不重复发截图了。

四、总结

  • web服务和thrift服务的区别,就是web服务多了web组件,springboot启动时候,会启动内置的tomcat容器。
  • web服务和thrift服务通信,web通过socket和thrift服务通信,thrift服务和web服务通过http通信,但是一般不会反过来调用,这样很不规范。
  • thrift服务和web服务的demo写得些许潦草,但是不着急,后续会逐步优化。
  • 接下来会开始搭建linux环境,然后把服务部署上去,是不是看上去越来越有模有样了,嘿嘿。越到后面越好玩,我会将这些个大箱子拆开,看看里面究竟是咋回事。



==> CODE
原创文章 257 获赞 277 访问量 69万+

猜你喜欢

转载自blog.csdn.net/qq_18297675/article/details/97319482