国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【spring Cloud】微服務通信的三種方式RestTemplate、Feign遠程調用與Dubbo的使用

這篇具有很好參考價值的文章主要介紹了【spring Cloud】微服務通信的三種方式RestTemplate、Feign遠程調用與Dubbo的使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、通過RestTemplate調用微服務

二、通過Feign遠程調用

三、Dubbo?


分布式中的遠程調用大概分為兩種

RESTful接口?

REST,即Representational State Transfer的縮寫,如果一個架構符合REST原則,就稱它為RESTful架構。

  • 每一個URI代表一種資源;
  • 客戶端和服務器之間,傳遞這種資源的某種表現(xiàn)層;
  • 客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現(xiàn)"表現(xiàn)層狀態(tài)轉化"。

RPC協(xié)議

RPC( Remote Procedure Call )一種進程間通信方式。允許像調用本地服務一樣調用遠程服務。 RPC框架的主要目標就是讓遠程服務調用更簡單、透明。 RPC框架負責屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進制)和通信細節(jié)。開發(fā)人員在使用的時候只需要了解誰在什么位置提供了什么樣的遠程服務接口即可,并不需要關心底層通信細節(jié)和調用過程。

區(qū)別與聯(lián)系?

比較項

RESTful

RPC

通訊協(xié)議

HTTP

一般使用TCP

性能

略低

較高

靈活度

應用

微服務架構

SOA架構

首先說下我這個案例的基本模型,通過訂單微服務與商品微服務,查詢商品實現(xiàn)下訂單。

前兩種方法都是用RESTful接口最后一個用的是RPC協(xié)議

一、通過RestTemplate調用微服務

配置RestTemplate交給spring管理

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

寫配置類或者啟動類中都行

通過restTemplate調用商品微服務

訂單微服務中控制器層自動注入RestTemplate?

通過 restTemplate.getForObject 方法獲取商品對象

    @Autowired
    private RestTemplate restTemplate;

    ......

    Product pr = restTemplate.getForObject("http://localhost:8081/product/" + pid, Product.class);

缺點

  • 代碼可讀性差,編程體驗不統(tǒng)一
  • 參數(shù)復雜URL難以維護?

二、通過Feign遠程調用

首先加入導入坐標

<!--fegin組件-->

<dependency>

????????<groupId>org.springframework.cloud</groupId>

????????<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

在啟動類上添加Fegin的注解

@EnableFeignClients//開啟Fegin

在訂單微服務中創(chuàng)建一個service,并使用Fegin實現(xiàn)微服務調用

@FeignClient("service-product")//聲明調用的提供者的name 
public interface ProductService {
    //指定調用提供者的哪個方法 
    //@FeignClient+@GetMapping 就是一個完整的請求路徑 http://service- product/product/{pid} 
    @GetMapping(value = "/product/{pid}")
    Product findById(@PathVariable("pid") int pid);
}

訂單微服務中控制器層改寫方法 獲取商品對象

    @Autowired
    private ProductService productService;
    
    ......

    Product pr = productService.findById(pid);

配置文件中

feign:  
  client:
    config: 
      service-product: # 針對某個微服務的配置
      # default: # 這里用default就是全局配置,如果是寫服務名稱,則是針對某個微服務的配置
         loggerLevel: FULL #  日志級別 
#需要把日志級別設置
logging:
  level:
    com.apesource: debug

而日志的級別分為四種:

  1. NONE:不記錄任何日志信息,這是默認值。
  2. BASIC:僅記錄請求的方法, URL以及響應狀態(tài)碼和執(zhí)行時間
  3. HEADERS:在BASIC的基礎上,額外記錄了請求和響應的頭信息
  4. FULL:記錄所有請求和響應的明細,包括頭信息、請求體、元數(shù)據(jù)。

Feign使用優(yōu)化?

Feign底層發(fā)起http請求,依賴于其它的框架。其底層客戶端實現(xiàn)包括:

  • URLConnection:默認實現(xiàn),不支持連接池
  • Apache HttpClient :支持連接池
  • OKHttp:支持連接池

因此提高Feign的性能主要手段就是使用連接池代替默認的URLConnection
這里我們用Apache的HttpClient來演示

導入依賴

<!--httpClient的依賴 -->

<dependency>

????????<groupId>io.github.openfeign</groupId>

????????<artifactId>feign-httpclient</artifactId>

</dependency>

配置文件

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

總結:

  1. 日志級別盡量用basic
  2. 使用HttpClient或OKHttp代替URLConnection

三、Dubbo?

Dubbo是阿里巴巴開源的基于Java的高性能RPC一種遠程調用) 分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。

首先在common服務中添加一個IProductService接口

public interface IProductService {
    Product findById(int pid);
}

在商品微服務中(服務提供者

添加Dobbo依賴

<!--dubbo-->

<dependency>

????????<groupId>com.alibaba.cloud</groupId>

????????<artifactId>spring-cloud-starter-dubbo</artifactId>

</dependency>

添加dubbo配置

dubbo: 
    scan: 
        base-packages: com.cc.service.impl # 開啟包掃描
    protocols: 
        dubbo: 
            name: dubbo # 服務協(xié)議 
            port: -1 # 服務端口 使用隨機端口
    registry: 
        address: spring-cloud://localhost # 注冊中心

創(chuàng)建IProductServiceImpl實現(xiàn)類

//暴露服務:注意這里使用的是dubbo提供的注解@Service,而不是Spring的
@Service
public class IProductServiceImpl implements IProductService {
    @Autowired
    private ProductMapper productMapper;

    @Override
    public Product findById(int pid) {
        return productMapper.selectById(pid);
    }
}

在訂單微服務中(服務消費者

導入Dobbo依賴

<!--dubbo-->

<dependency>

????????<groupId>com.alibaba.cloud</groupId>

????????<artifactId>spring-cloud-starter-dubbo</artifactId>

</dependency>

添加dobbo配置

dubbo: 
    registry: 
        address: spring-cloud://localhost # 注冊中心
    cloud: 
        subscribed-services: service-product # 訂閱的提供者名稱

?在訂單微服務中控制器層改寫方法 獲取商品對象文章來源地址http://www.zghlxwxcb.cn/news/detail-848007.html

    @Reference
    private IProductService productService;

    ......

    Product pr = productService.findById(pid);

到了這里,關于【spring Cloud】微服務通信的三種方式RestTemplate、Feign遠程調用與Dubbo的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring 創(chuàng)建 Bean 的三種方式

    在使用 Spring 框架后,對象以 Bean 的形式統(tǒng)一交給 IOC 容器去創(chuàng)建和管理?,F(xiàn)階段主流的方式是基于 SpringBoot 框架,基于注解的方式實現(xiàn) Bean 的創(chuàng)建,但在原生 Spring 框架中其實存在三種創(chuàng)建 Bean 的方式。 BeanProcess 實體類,雖然加了 @Component 等三個注解,但只在注解方式創(chuàng)建

    2024年02月14日
    瀏覽(17)
  • Spring Boot 禁用 Swagger 的三種方式

    Spring Boot 禁用 Swagger 的三種方式

    禁用方法1: ====== 使用注解 @Value() 推薦使用 package com.dc.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; impo

    2024年04月22日
    瀏覽(34)
  • 微服務系列-如何使用 RestTemplate 進行 Spring Boot 微服務通信示例

    下面我們將學習如何創(chuàng)建多個 Spring boot 微服務以及如何使用 RestTemplate 類在多個微服務之間進行同步通信。 微服務通信有兩種風格: 同步通訊 異步通信 在同步通信的情況下,客戶端發(fā)送請求并等待服務的響應。這里重要的一點是協(xié)議(HTTP/HTTPS)是同步的,客戶端代碼只有

    2024年02月05日
    瀏覽(28)
  • spring中bean實例化的三種方式 -- Spring入門(二)

    spring中bean實例化的三種方式 -- Spring入門(二)

    為了鞏固所學的知識,作者嘗試著開始發(fā)布一些學習筆記類的博客,方便日后回顧。當然,如果能幫到一些萌新進行新技術的學習那也是極好的。作者菜菜一枚,文章中如果有記錄錯誤,歡迎讀者朋友們批評指正。 (博客的參考源碼以及可以在我主頁的資源里找到,如果在學

    2024年02月16日
    瀏覽(20)
  • Spring 框架入門介紹及IoC的三種注入方式

    Spring 框架入門介紹及IoC的三種注入方式

    目錄 一、Spring 簡介 1. 簡介 2. spring 的核心模塊 ? ?二、IoC 的概念 2.1 IoC 詳解 2.2 IoC的好處 2.3 談談你對IoC的理解 三、IoC的三種注入方式 3.1 構造方法注入 3.2?setter方法注入 3.3 接口注入(自動分配) 3.4 spring上下文與tomcat整合 3.5 總結 ????????Spring框架 是?Java?平臺的一個

    2024年02月12日
    瀏覽(32)
  • spring boot請求http接口的三種方式

    HttpURLConnection 是 Java 中的 HTTP 客戶端實現(xiàn),,適用于簡單的請求需要。 HttpURLConnection主要工作內容:打開socket連接,封裝http請求報文,解析請求報文。 OkHttp 是一個第三方的 HTTP 客戶端庫,它比 Java 標準的 HttpURLConnection 更高效、更實用。主要特點包括: 比 HttpURLConnection 快得多

    2024年02月14日
    瀏覽(28)
  • Spring Boot獲取resources目錄下的文件的三種方式

    在Spring Boot項目中,經常需要獲取 resources 目錄下的文件。這些文件可以包括配置文件、模板文件、靜態(tài)資源等。本文將介紹三種常用的方法來獲取 resources 目錄下的文件。 ResourceLoader 接口是Spring框架提供的用于加載各種資源的接口,包括 classpath 下的資源。在Spring Boot中,可

    2024年02月16日
    瀏覽(44)
  • 量化分析革新金融服務軟件的三種方式

    金融服務軟件行業(yè)愛死量化分析了。 為什么呢?因為在這個本質上不可預測的行業(yè)中,量化分析提供了一種確定性,或者至少是類似于確定性的東西。 市場總是在變動,利潤也起伏不定。交易達成了,然后落空,又再次達成,從交易大廳到董事會,納秒級的差異可能成就巨

    2024年02月08日
    瀏覽(20)
  • K8s暴露服務的三種方式

    在 Kubernetes 中,我們可以使用三種方式來暴露服務,以便外部應用程序可以訪問它們。這些方式包括: NodePort NodePort 是 Kubernetes 中最簡單的一種暴露服務的方式。它允許我們將容器端口映射到主機的某個端口上。這樣,我們就可以通過主機的 IP 地址和該端口訪問服務。Node

    2024年02月11日
    瀏覽(26)
  • 【Spring Cloud系列】- RestTemplate使用詳解

    RestTemplate是Spring框架提供用于調用Rest接口的一個應用,它簡化了與http服務通信方式。RestTemplate統(tǒng)一Restfull調用的標準,封裝HTTP鏈接,只要需提供URL及返回值類型即可完成調用。相比傳統(tǒng)的HttpClient與Okhttp,RestTemplate是一種優(yōu)雅,簡潔調用RESTfull服務的方式。 RestTemplate默認依賴

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包