【從零搭建後端基礎設施系列(四)】-- 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章