最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年05月31日 09:05:28   作者:JavaStorm  
這篇文章主要介紹了Spring Boot Dubbo 構建分布式服務的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

概述:

 

節(jié)點角色說明

節(jié)點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務注冊與發(fā)現(xiàn)的注冊中心
Monitor 統(tǒng)計服務的調用次數(shù)和調用時間的監(jiān)控中心
Container 服務運行的容器

調用關系說明

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

 項目構建

開發(fā)環(huán)境主要涉及以下方面:

  • Spring Boot
  • JDK 8
  • Dubbo 2.7.1
  • Zookeeper

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

Dubbo API

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

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 協(xié)議配置
 protocol:
  # -1 表示使用隨機未被占用的端口
  port: -1
  name: dubbo
 scan:
  # dubbo 服務提供者實現(xiàn)類所在包
  base-packages: com.zero.provider.impl

實現(xiàn) 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接口給前端調用。同時內(nèi)部通過 Dubbo 實現(xiàn) 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

服務消費者調用服務生產(chǎn)者

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;
  }
}

總結

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java異步非阻塞編程的幾種方式總結

    Java異步非阻塞編程的幾種方式總結

    這篇文章主要介紹了Java異步非阻塞編程的幾種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringCloud集成Micrometer Tracing的代碼工程

    SpringCloud集成Micrometer Tracing的代碼工程

    Micrometer Tracing 是一個用于微服務架構的追蹤庫,它提供了一種簡單而強大的方式來收集和報告分布式系統(tǒng)中的性能和調用鏈信息,Micrometer Tracing 旨在幫助開發(fā)者和運維人員理解微服務之間的交互,本文給大家介紹了如何在 Spring Cloud 集成 Micrometer Tracing
    2024-12-12
  • SwiftUI中級List如何添加新內(nèi)容(2020年教程)

    SwiftUI中級List如何添加新內(nèi)容(2020年教程)

    這篇文章主要介紹了SwiftUI中級List如何添加新內(nèi)容,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Spring Boot 2.0快速構建服務組件全步驟

    Spring Boot 2.0快速構建服務組件全步驟

    這篇文章主要給大家介紹了關于Spring Boot 2.0快速構建服務組件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot 2.0具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 時間中間鍵的整理

    時間中間鍵的整理

    這篇文章主要介紹了時間中間鍵的整理的相關資料,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • SpringBoot整合阿里?Druid?數(shù)據(jù)源的實例詳解

    SpringBoot整合阿里?Druid?數(shù)據(jù)源的實例詳解

    這篇文章主要介紹了SpringBoot整合阿里?Druid?數(shù)據(jù)源,主要講解了手動配置方法,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Spring Boot項目@RestController使用重定向redirect方式

    Spring Boot項目@RestController使用重定向redirect方式

    這篇文章主要介紹了Spring Boot項目@RestController使用重定向redirect方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JAVA 實現(xiàn)二叉樹(鏈式存儲結構)

    JAVA 實現(xiàn)二叉樹(鏈式存儲結構)

    本篇文章主要介紹用JAVA 實現(xiàn)二叉樹,并提供實例.對二叉樹數(shù)據(jù)結構很好的學習實踐,有需要的朋友可以參考下
    2016-07-07
  • Idea如何自定義VM配置

    Idea如何自定義VM配置

    這篇文章主要介紹了Idea如何自定義VM配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • IDEA未配置SQL方言:無法使用SQL提示解決方法

    IDEA未配置SQL方言:無法使用SQL提示解決方法

    在使用IDEA進行SQL開發(fā)時,如果未配置SQL方言可能會導致一些問題,如無法正確識別數(shù)據(jù)庫中的關鍵字、數(shù)據(jù)類型等,這篇文章主要給大家介紹了關于IDEA未配置SQL方言,無法使用SQL提示解決方法的相關資料,需要的朋友可以參考下
    2024-07-07

最新評論

井冈山市| 上林县| 连云港市| 蓬溪县| 汾阳市| 鄂尔多斯市| 汝南县| 吉木乃县| 宿松县| 灵川县| 五华县| SHOW| 酒泉市| 山阴县| 东乌| 宕昌县| 兰州市| 芦山县| 日照市| 邯郸市| 凯里市| 永登县| 景德镇市| 门头沟区| 沙坪坝区| 万源市| 绥化市| 乌兰察布市| 天门市| 苗栗县| 宁陵县| 军事| 铅山县| 扎囊县| 乌拉特后旗| 洛川县| 洪洞县| 东山县| 隆子县| 曲阳县| 磐石市|