首頁  >  文章  >  Java  >  SpringBoot2.0如何實現RPC服務遠端呼叫

SpringBoot2.0如何實現RPC服務遠端呼叫

WBOY
WBOY轉載
2023-05-11 20:22:041262瀏覽

一、Dubbo框架簡介

1、框架依賴

SpringBoot2.0如何實現RPC服務遠端呼叫

圖例說明:

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、專案結構說明

SpringBoot2.0如何實現RPC服務遠端呼叫

結構說明

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.Referenceorg.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() ;
  }
}

以上是SpringBoot2.0如何實現RPC服務遠端呼叫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除