中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot Dubbo 構建分布式服務的方法

發布時間:2020-10-17 21:22:10 來源:腳本之家 閱讀:136 作者:JavaStorm 欄目:編程語言

概述:

 Spring Boot Dubbo 構建分布式服務的方法

節點角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務注冊與發現的注冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行的容器

調用關系說明

  • 服務容器 Container 負責啟動,加載,運行服務提供者。
  • 服務提供者 Provider 啟動的時候,向注冊中心 Registry 注冊自己提供的服務。
  • 服務消費者 Consumer 在啟動的時候,向注冊中心 Registry 訂閱自己所需要的服務。注冊中心 Registry 返回服務提供者的地址列表給消費者,如果有變更注冊中心將基于長連接推送變更數據給消費者。
  • 服務消費者從提供者地址列表中,基于軟負載均衡算法,選擇一臺提供者進行進行調用,如果調用失敗再選擇另外一臺。
  • 服務消費者與提供者在內存中統計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心 Monitor 。

 項目構建

開發環境主要涉及以下方面:

  • Spring Boot
  • JDK 8
  • Dubbo 2.7.1
  • Zookeeper

具體代碼可以查看 github 的 dubbo 模塊: https://github.com/UniqueDong/springboot-study

Dubbo API

定義服務接口,打成 jar 包讓消費者依賴,服務者實現接口。該工程只有接口定義以及 model 對象。@Data 屬于lombok 開源庫提供的特性,方便開發。

model 對象定義:

@Data
public class User implements Serializable {
  private Long id;
  private String username;
}

provider 接口定義:

public interface UserProvider {
  List<User> listUser();
}

Provider 服務提供者

pom依賴:

引入spring-boot-starter,dubbo-api 接口就是我們上面提到的 接口定義 jar ,dubbo-spring-boot-starter ,dubbo-dependencies-zookeeper。

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <exclusions>
        <exclusion>
          <artifactId>spring-boot-starter-logging</artifactId>
          <groupId>org.springframework.boot</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>zero.springboot.study</groupId>
      <artifactId>dubbo-api</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
    <!--dubbo start-->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.7.1</version>
    </dependency>

    <!-- Zookeeper dependencies -->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-dependencies-zookeeper</artifactId>
      <version>2.7.1</version>
      <type>pom</type>
      <exclusions>
        <exclusion>
          <artifactId>log4j</artifactId>
          <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
          <artifactId>slf4j-log4j12</artifactId>
          <groupId>org.slf4j</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <!--dubbo end-->
    
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.57</version>
    </dependency>
  </dependencies>

配置文件 yaml 定義:

spring:
 application:
  name: dubbo-provider
#自定義配置
embedded:
 zookeeper:
  # zookeeper 服務連接端口
  port: 2181

# dubbo 配置
dubbo:
 # 注冊中心配置 
 registry:
  id: dubbo-provider
  address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
  group: local
 application:
  name: dubbo-provider
  id: dubbo-provider
  logger: slf4j
  qosEnable: true
  qosPort: 22224
  qosAcceptForeignIp: false
 # dubbo 協議配置
 protocol:
  # -1 表示使用隨機未被占用的端口
  port: -1
  name: dubbo
 scan:
  # dubbo 服務提供者實現類所在包
  base-packages: com.zero.provider.impl

實現 api 定義的接口

注意 @Service 是 Dubbo 的,不要導入了 Spring 的。

import com.google.common.collect.Lists;
import com.zero.api.model.User;
import com.zero.api.provider.UserProvider;
import org.apache.dubbo.config.annotation.Service;

import java.util.List;

@Service(interfaceClass = UserProvider.class)
public class UserProviderImpl implements UserProvider {
  @Override
  public List<User> listUser() {
    User user = new User();
    user.setId(1L);
    user.setUsername("青龍");
    return Lists.newArrayList(user);
  }
}

Consumer

Pom 定義:

我們要依賴 spring-boot-starter-web 提供http rest接口給前端調用。同時內部通過 Dubbo 實現 RPC調用服務提供者。

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>zero.springboot.study</groupId>
      <artifactId>dubbo-api</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
    <!--dubbo start-->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.7.1</version>
    </dependency>

    <!-- Zookeeper dependencies -->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-dependencies-zookeeper</artifactId>
      <version>2.7.1</version>
      <type>pom</type>
      <exclusions>
        <exclusion>
          <artifactId>log4j</artifactId>
          <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
          <artifactId>slf4j-log4j12</artifactId>
          <groupId>org.slf4j</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <!--dubbo end-->

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

  </dependencies>

yaml 定義:

server:
 # web 日更年期端口
 port: 9005
spring:
 application:
  name: dubbo-comsumer
#自定義配置
embedded:
 zookeeper:
  port: 2181
# dubbo 配置
dubbo:
 registry:
  id: dubbo-comsumer
  address: zookeeper://127.0.0.1:${embedded.zookeeper.port}
  group: local
 application:
  name: dubbo-comsumer
  id: dubbo-comsumer
  logger: slf4j
  qosEnable: false
  qosPort: 22223
  qosAcceptForeignIp: false
 protocol:
  port: -1
  name: dubbo
 # 是否檢查服務提供者有效 
 consumer:
  check: false

服務消費者調用服務生產者

import com.zero.api.model.User;
import com.zero.api.provider.UserProvider;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

  @Reference
  private UserProvider userProvider;

  public List<User> listUser() {
    return userProvider.listUser();
  }
}

我們通過一個RESTfull接口,提供給前端調用。

@RestController
@RequestMapping("/users")
public class UserController {
  @Autowired
  private UserService userService;

  @GetMapping
  public Object listUser() {
    List<User> list = userService.listUser();
    return list;
  }
}

總結

各種具體協議、注冊中心、多注冊中心、超時等配置可以查看官方文檔 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林甸县| 衡水市| 承德县| 兴文县| 甘南县| 赤峰市| 治多县| 朝阳县| 客服| 江永县| 临泉县| 精河县| 西充县| 金山区| 通渭县| 繁峙县| 登封市| 尖扎县| 乌兰浩特市| 虎林市| 克什克腾旗| 太保市| 静安区| 松阳县| 河南省| 东平县| 盱眙县| 辽宁省| 陇西县| 永福县| 克东县| 哈巴河县| 马关县| 孟津县| 连南| 平顶山市| 区。| 武义县| 若尔盖县| 建阳市| 都匀市|