1. 程式人生 > >SpringBoot2.0高階案例(08):整合 Dubbo框架 ,實現RPC服務遠端呼叫

SpringBoot2.0高階案例(08):整合 Dubbo框架 ,實現RPC服務遠端呼叫

一、Dubbo框架簡介

1、框架依賴

圖例說明:

1)圖中小方塊 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表層或模組,藍色的表示與業務有互動,綠色的表示只對 Dubbo 內部互動。

2)圖中背景方塊 Consumer, Provider, Registry, Monitor 代表部署邏輯拓撲節點。

3)圖中藍色虛線為初始化時呼叫,紅色虛線為執行時非同步呼叫,紅色實線為執行時同步呼叫。

4)圖中只包含 RPC 的層,不包含 Remoting 的層,Remoting 整體都隱含在 Protocol 中。

2、核心角色說明

1)Provider 暴露服務的服務提供方

2)Consumer 呼叫遠端服務的服務消費方(負載均衡)

3)Registry 服務註冊與發現的註冊中心(監控、心跳、踢出、重入)

4)Monitor 服務消費者和提供者在記憶體中累計呼叫次數和呼叫時間,主動定時每分鐘傳送一次統計資料到監控中心。

5)Container 服務執行容器:遠端呼叫、序列化

二、與SpringBoot2.0整合

1、核心依賴

<!-- 這裡包含了Zookeeper依賴和Dubbo依賴 -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

2、專案結構說明

結構說明

dubbo-consume:服務消費方
dubbo-provider:服務提供方
dubbo-common:公共程式碼塊,Dubbo介面,實體類

3、核心配置

1)提供方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7007
  connection-timeout: 5000ms
spring:
  application:
    name: block-dubbo-provider
# Dubbo 配置檔案
dubbo:
  application:
    name: block-dubbo-provider
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: com.boot.consume

2)消費方配置

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 1000
    min-spare-threads: 30
  port: 7008
  connection-timeout: 5000ms

spring:
  application:
    name: block-dubbo-consume
# Dubbo 配置檔案
dubbo:
  application:
    name: block-dubbo-consume
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper

三、演示案例

1、服務遠端呼叫

1)提供方服務介面

  • 注意這裡的註解
  • com.alibaba.dubbo.config.annotation.Service
@Service
@Component
public class DubboServiceImpl implements DubboService {
    private static Logger LOGGER = LoggerFactory.getLogger(DubboServiceImpl.class) ;
    @Override
    public String getInfo(String param) {
        LOGGER.info("字元引數:{}",param);
        return "[Hello,Cicada]";
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        LOGGER.info("實體類引數:{}",userEntity);
        return userEntity;
    }
}

2)消費方介面

  • 注意這裡註解
  • com.alibaba.dubbo.config.annotation.Reference
  • org.springframework.stereotype.Service
@Service
public class ConsumeService implements DubboService {
    @Reference
    private DubboService dubboService ;
    @Override
    public String getInfo(String param) {
        return dubboService.getInfo(param);
    }
    @Override
    public UserEntity getUserInfo(UserEntity userEntity) {
        return dubboService.getUserInfo(userEntity);
    }
}

2、介面超時配置

該配置可以在服務提供方配置,也可以在服務消費方配置,這裡演示在提供方的配置。 註解:timeout 1)服務介面註解

@Service(timeout = 2000)
@Component
public class DubboServiceImpl implements DubboService {
}

2)消費方呼叫

 @Override
 public String timeOut(Integer time) {
     return dubboService.timeOut(time);
 }

3)測試介面 服務超時丟擲異常

com.alibaba.dubbo.remoting.TimeoutException

3、介面多版本配置

1)服務提供方 相同介面提供兩個版本實現。註解:version。 版本一:

@Service(version = "1.0.0")
@Component
public class VersionOneImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{當前版本:1.0.0}";
    }
}

版本二:

@Service(version = "2.0.0")
@Component
public class VersionTwoImpl implements VersionService {
    @Override
    public String getVersion() {
        return "{當前版本:2.0.0}";
    }
}

2)消費方呼叫 通過@Reference(version)註解,將指向不同版本的介面實現。

@Service
public class VersionServiceImpl implements VersionService {
    @Reference(version = "1.0.0")
    private VersionService versionService1 ;
    @Reference(version = "2.0.0")
    private VersionService versionService2 ;
    @Override
    public String getVersion() {
        return versionService1.getVersion();
    }
    public String version2 (){
        return versionService2.getVersion() ;
    }
}

以上案例都是參照Dubbo官網的流程編寫的,Dubbo許多強大功能都可以參考官網一步步的配置。

四、原始碼地址

GitHub地址:知了一笑
https://github.com/cicadasmile/middle-ware-parent
碼雲地址:知了一笑
https://gitee.com/cicadasmile/middle-ware-parent

相關推薦

SpringBoot2.0高階案例(08)整合 Dubbo框架 ,實現RPC服務遠端呼叫

一、Dubbo框架簡介 1、框架依賴 圖例說明: 1)圖中小方塊 Protocol, Cluster, Proxy, Servi

SpringBoot2.0高階案例(09)整合 ElasticSearch框架,實現高效能搜尋引擎

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(12)整合 SpringSecurity 框架實現使用者許可權安全管理

一、Security簡介 1、基礎概念 Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪

SpringBoot2.0高階案例(10)整合 JWT 框架,解決Token跨域驗證問題

GitHub原始碼地址:知了一笑 https://github.com/cicadasmile/middle-ware-paren

SpringBoot2.0高階案例(02) 整合 RocketMQ ,實現請求非同步處理

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(03)整合 JavaMail ,實現非同步傳送郵件

本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent

SpringBoot2.0高階案例(05)整合 Swagger2 ,構建介面管理介面

一、Swagger2簡介 1、Swagger2優點 整合到Spring Boot中,構建強大RESTful API文件。省去介面文

SpringBoot2.0高階案例(06)整合 QuartJob ,實現定時器實時管理

一、QuartJob簡介 1、一句話描述 Quartz是一個完全由java編寫的開源作業排程框架,形式簡易,功能強大。 2、核心A

SpringBoot2.0高階案例(07) 整合Redis叢集 ,實現訊息佇列場景

本文原始碼 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-pa

SpringBoot2高階案例(11)整合 FastDFS 中介軟體,實現檔案分散式管理

一、FastDFS簡介 1、FastDFS作用 FastDFS是一個開源的輕量級分散式檔案系統,它對檔案進行管理,功能包括:檔案儲

使用dubbo+zookeeper實現簡單的遠端呼叫

想用dubbo+zookeeper實現遠端呼叫的第一步是安裝zookeeper: zookeeper的安裝步驟 安裝完成之後啟動zookeeper,然後安裝dubbo-admin (用於更好的監控服務與管理):dubbo-admin的安裝步驟 都OK了之後來開始搭建我們的專案,首先建立一

Spring Boot 2.x 基礎案例整合Dubbo 2.7.3+Nacos1.1.3(最新版)

1、概述 本文將介紹如何基於Spring Boot 2.x的版本,通過Nacos作為配置與註冊中心,實現Dubbo服務的註冊與消費。 整合元件的版本說明: Spring Boot 2.1.9 Dubbo 2.7.3 Nacos 1.1.3 本文的亮點: 1.採用yml方式進行dubbo的配置。 2.

Spring Boot 2.x 基礎案例整合Dubbo 2.7.3+Nacos1.1.3(配置中心)

本文原創首發於公眾號:Java技術乾貨 1、概述 本文將Nacos作為配置中心,實現配置外部化,動態更新。這樣做的優點:不需要重啟應用,便可以動態更新應用裡的配置資訊。在如今流行的微服務應用下,將應用的配置統一管理,顯得尤為重要。 上一篇寫了《Spring Boot 2.x 基礎案例:整合Dubbo

SpringBoot開發案例整合Dubbo分布式服務

tps blog 計算 報錯 相同 tor 3.4 .class 總結 前言 在 SpringBoot 很火熱的時候,阿裏巴巴的分布式框架 Dubbo 不知是處於什麽考慮,在停更N年之後終於進行維護了。在之前的微服務中,使用的是當當維護的版本 Dubbox,整合方式也是使

SpringBoot--01.SpringBoot2.0入門案例

一、SpringBoot簡介 1、SpringBoot概述(簡化配置、開箱即用) - 為所有 Spring 的開發者提供一個非常快速的、廣泛接受的入門體驗 - 開箱即用(啟動器starter-其實就是SpringBoot提供的一個jar包),但通過自己設定參 (.properties),

服務 SpringBoot 2.0(九)整合Mybatis

我是SQL小白,我選Mybatis —— Java面試必修 引言 在第五章我們已經整合了Thymeleaf頁面框架,第七章也整合了JdbcTemplate,那今天我們再結合資料庫整合Mybatis框架 在接下來的文章中,我會用一個開源的部落格原始碼來做講解

Springboot2.0啟動報錯java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle

springboot2.0啟動報錯: java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle     at java.lang.ClassLoader.defineClass1(Native Met

springBoot2.0 MyBatis Redis 及RedisCache 整合附demo

springboot2.0 + mybatis 或者 springboot2.0 + redis 在網上可以找到很多資料,但是大都不全或者有這樣那樣的問題,所以便自己動手寫了個demo,能只用 yaml 配置的,儘量不再寫程式碼。 pom.xml <?xml ver

springboot學習入門簡易版四---springboot2.0靜態資源訪問及整合freemarker視圖層

nbsp 規則 pri stat path 整合 位置 啟動程序 -- 2.4.4 SpringBoot靜態資源訪問(9) Springboot默認提供靜態資源目錄位置需放在classpath下,目錄名需要符合如下規則 /static /public /resour

SpringCloud微服務基於Nacos元件,整合Dubbo框架

原始碼地址:[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base) || [GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base) # 一、基礎元件簡介 ## 1、Dubb