真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

微服務(wù)(三)——遠程調(diào)用-創(chuàng)新互聯(lián)

目錄
  • 前言
  • 1. RestTemplate
    • 1. 導(dǎo)入依賴
    • 2. 代碼
    • 3. 常用方法
  • 2. jodd-http
    • 1. 引入依賴
    • 2. 代碼
    • 3. 測試
  • 3. Feign
    • 1. 引入依賴
    • 2. 使用過程
    • 3. 自定義配置
    • 4. 優(yōu)化

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都做網(wǎng)站、開化網(wǎng)絡(luò)推廣、小程序開發(fā)、開化網(wǎng)絡(luò)營銷、開化企業(yè)策劃、開化品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供開化建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
前言

微服務(wù)都是獨立部署的,要實現(xiàn)一個業(yè)務(wù)可能需要多個服務(wù)之間的通信,所以遠程調(diào)用必不可少,本文將提供三種遠程調(diào)用的方案:jodd-http、RestTemplate、Feign。

在此說一下 springboot父子 工程的搭建流程:

  • 先創(chuàng)建一個springboot項目,然后刪掉不必要的文件,如下圖:

  • 然后創(chuàng)建子項目,新建模塊,選擇 maven 工程

注意:

  • 父工程中已經(jīng)導(dǎo)入的依賴,子工程會集成,無需再次導(dǎo)入
  • 父工程可以用來進行依賴版本管理,如下:
    當(dāng)父工程規(guī)定好spring-cloud的版本號之后,子工程引入該依賴或其旗下依賴,都會根據(jù)父工程的版本號來引入
    UTF-8UTF-81.82021.0.5 org.springframework.cloud spring-cloud-dependencies ${spring.cloud-version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2.2.6.RELEASE pom import

1. RestTemplate

前期準(zhǔn)備:

  • 搭建好工程:

    remote_service是模擬遠程服務(wù)的一個模塊,其controller代碼如下:

    @RequestMapping("/remote")
    @RestController
    public class RemoteController {@GetMapping("/{name}")
        public String sayHello(@PathVariable("name") String name) {return name.toUpperCase() + " 發(fā)起了請求,并請求成功";
        }
    }
1. 導(dǎo)入依賴

RestTemplate 是spring自帶的遠程調(diào)用工具,所以只要有spring的依賴,都可以直接使用(隨便導(dǎo)入一個spring-boot-dependencies或者spring-boot-starter-web都行)。

2. 代碼

在使用RestTemplate之前,需要先在容器中注冊。將下述代碼寫在一個配置類(@Configuration)中,或者直接寫在 啟動類(main)中都可以。

@Bean
    public RestTemplate restTemplate() {return new RestTemplate();
    }

controller代碼:

@RequestMapping("/rest")
@org.springframework.web.bind.annotation.RestController
public class RestController {private static final String NAME = "rest_template";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping
    public String sayHello() {String url = "http://127.0.0.1:8088/remote/" + NAME;
        String msg = restTemplate.getForObject(url, String.class);
        return msg;
    }
}

測試: 請求成功。

3. 常用方法

RestTemplate的使用比較簡單,這里再簡單說一下它的常用方法:

方法請求說明
getForEntityGET常用:publicResponseEntitygetForEntity(地址, 返回類型)
getForObjectGET常用:publicT getForObject(地址, 返回類型)
對getForEntity函數(shù)的進一步封裝,只關(guān)注返回的消息體的內(nèi)容,對其他信息都不關(guān)注
postForEntityPOST常用:publicResponseEntitypostForEntity(地址, 上傳的參數(shù)(可為空),返回類型)
postForObjectPOST常用:publicResponseEntitypostForObject(地址, 上傳的參數(shù)(可為空),返回類型)
對postForEntity函數(shù)的進一步封裝,只關(guān)注返回的消息體的內(nèi)容,對其他信息都不關(guān)注
postForLocationPOST常用:public URI postForLocation(地址, 上傳的參數(shù)(可為空))
返回新資源所在的 url
putPUT常用:public void put(地址, 上傳的參數(shù)(可為空))
deleteDELETE常用:public void delete(地址, 上傳的參數(shù))

在這里補充一下RestfulHTTP動詞

  • GET(SELECT):從服務(wù)器取出資源(一項或多項)
  • POST(CREATE):在服務(wù)器新建一個資源
  • PUT(UPDATE):在服務(wù)器更新資源(客戶端提供改變后的完整資源)
  • PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供改變的屬性)
  • DELETE(DELETE):從服務(wù)器刪除資源
2. jodd-http 1. 引入依賴

需要導(dǎo)入兩個依賴:

  • fastjson:用于 json 數(shù)據(jù) 與 接收類型 的轉(zhuǎn)化
  • jodd-http:用于發(fā)起 http 請求
com.alibabafastjson1.2.83org.joddjodd-http3.7.1
2. 代碼

工具類:

import com.alibaba.fastjson.JSONObject;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;

import java.nio.charset.StandardCharsets;
import java.util.Map;

public class HttpUtil {public static String post(String url, Mapmap) {HttpResponse res = HttpRequest.post(url).connectionTimeout(90000).timeout(90000)
                .contentType("application/json", "UTF-8")
                .bodyText(JSONObject.toJSONString(map), "application/json", "UTF-8")
                .send();
        res.charset("utf-8");
        return res.bodyText();
    }

    public static String post(String url, String jsonStr) {HttpResponse resp = HttpRequest.post(url).connectionTimeout(60000).timeout(60000)
                .contentType("application/json", StandardCharsets.UTF_8.toString())
                .bodyText(jsonStr ,"application/json", "UTF-8")
                .send();
        resp.charset(StandardCharsets.UTF_8.toString());
        return resp.bodyText();
    }

    public static String get(String url, Mapparams) {HttpRequest request = HttpRequest.get(url);
        if (params != null) {request.query(params);
        }
        HttpResponse response = request.send();
        return response.bodyText();
    }
}

Controller:

@RequestMapping("/jodd")
@RestController
public class JoddController {private static final String NAME = "jodd_http";

    @GetMapping
    public String sayHello() {String url = "http://127.0.0.1:8088/remote/" + NAME;
        String msg = HttpUtil.get(url, new HashMap<>());
        return msg;
    }
}
3. 測試

注意: 這個我在之前的文章中講過,點擊跳轉(zhuǎn) ,這里就不再多說。

3. Feign

Feign是一個聲明式的http客戶端:點擊圖片跳轉(zhuǎn)。

鑒于前面的兩種方法,對于參數(shù)復(fù)雜URL難以維護,所以建議使用Feign。

1. 引入依賴

Feign是基于springcloud來發(fā)起遠程請求的,需要與nacos等注冊中心搭配使用,點擊跳轉(zhuǎn)注冊中心文章。

要引入Feign依賴,就需要先引入springcloud的依賴:

org.springframework.cloudspring-cloud-dependencies2021.0.5pomimport

注意: 引入springcloud依賴的時候,需要注意springboot的版本。

  • springboot 與 springcloud 的版本對應(yīng)關(guān)系
    點擊圖片跳轉(zhuǎn)

然后導(dǎo)入Feign依賴:

org.springframework.cloudspring-cloud-starter-openfeign3.1.2

注意: 啟動項目報錯:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

解決方案: https://blog.csdn.net/qq_43788878/article/details/115764008

2. 使用過程
  1. 在啟動類上添加一個@EnableFeignClients

  2. 編寫Feign接口

    @Component
    //@FeignClient:微服務(wù)客戶端注解,value:指定微服務(wù)的名字,這樣就可以使Feign客戶端直接找到對應(yīng)的微服務(wù)
    @FeignClient(value = "remote")
    public interface MyFeignClient {@GetMapping("/remote/{name}")
        String sayHello(@PathVariable("name") String name);
    }
    

    這個客戶端主要是基于SpringMVC的注解來聲明遠程調(diào)用的信息,比如:

    • 服務(wù)名稱:remote
    • 請求方式:GET
    • 請求路徑:/remote/{name}
    • 請求參數(shù):String name
    • 返回值類型:String

    這樣,F(xiàn)eign就可以幫助我們發(fā)送http請求,無需自己使用RestTemplate來發(fā)送了。

  3. controller

    @RestController("/feign")
    public class FeignController {private static final String NAME = "feign";
    
        @Resource
        private MyFeignClient feignClient;
    
        @GetMapping
        public String sayHello() {String msg = feignClient.sayHello(NAME);
            return msg;
        }
    }

以上就是Feign的使用步驟,因為懶得去搭建注冊中心,所以就不測試了。

3. 自定義配置

Feign可以支持很多的自定義配置,如下表所示:

類型作用說明
feign.Logger.Level修改日志級別包含四種不同的級別:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder響應(yīng)結(jié)果的解析器http遠程調(diào)用的結(jié)果做解析,例如解析json字符串為java對象
feign.codec.Encoder請求參數(shù)編碼將請求參數(shù)編碼,便于通過http請求發(fā)送
feign. Contract支持的注解格式默認是SpringMVC的注解
feign. Retryer失敗重試機制請求失敗的重試機制,默認是沒有,不過會使用Ribbon的重試

一般情況,直接使用默認配置就OK了。

自定義配置的方法:

  • 方法一:修改配置文件

    feign:  
      client:
        config: 
          remote: # 針對某個微服務(wù)的配置,這里也可以使用 default(全局配置),針對所有微服務(wù)
            loggerLevel: FULL #  日志級別

    日志的四種級別:

    • NONE:不記錄任何日志信息,這是默認值
    • BASIC:僅記錄請求的方法,URL以及響應(yīng)狀態(tài)碼和執(zhí)行時間
    • HEADERS:在BASIC的基礎(chǔ)上,額外記錄了請求和響應(yīng)的頭信息
    • FULL:記錄所有請求和響應(yīng)的明細,包括頭信息、請求體、元數(shù)據(jù)
  • 方式二:Java代碼
    先聲明一個類,然后聲明一個Logger.Level的對象

    public class DefaultFeignConfiguration  {@Bean
        public Logger.Level feignLogLevel(){return Logger.Level.FULL; // 日志級別為BASIC
        }
    }

    啟動類添加注解(全局配置,針對所有微服務(wù)):

    @EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class)

    添加到自定義FeignClient接口中(針對某一微服務(wù)):

    @FeignClient(value = "remote", configuration = DefaultFeignConfiguration .class)
4. 優(yōu)化
  • 日志級別盡量用basic
  • 使用連接池,這是提高Feign性能的主要手段:
    Feign底層發(fā)起http請求,依賴于其它的框架。其底層客戶端實現(xiàn)包括:
    • URLConnection:默認實現(xiàn),不支持連接池

    • Apache HttpClient :支持連接池

    • OKHttp:支持連接池

優(yōu)化演示:

  • 引入feign-httpclient依賴(帶連接池的客戶端)

    io.github.openfeignfeign-httpclient
  • 配置連接池和日志

    feign:
      client:
        config:
          default: # default全局的配置
            loggerLevel: BASIC # 日志級別,BASIC就是基本的請求和響應(yīng)信息
      httpclient:
        enabled: true # 開啟feign對HttpClient的支持
        max-connections: 200 # 大的連接數(shù)
        max-connections-per-route: 50 # 每個路徑的大連接數(shù)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前名稱:微服務(wù)(三)——遠程調(diào)用-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://weahome.cn/article/degijs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部