欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

概述:

 

節(jié)點角色說明

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

調(diào)用關系說明

  • 服務容器 Container 負責啟動,加載,運行服務提供者。
  • 服務提供者 Provider 啟動的時候,向注冊中心 Registry 注冊自己提供的服務。
  • 服務消費者 Consumer 在啟動的時候,向注冊中心 Registry 訂閱自己所需要的服務。注冊中心 Registry 返回服務提供者的地址列表給消費者,如果有變更注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。
  • 服務消費者從提供者地址列表中,基于軟負載均衡算法,選擇一臺提供者進行進行調(diào)用,如果調(diào)用失敗再選擇另外一臺。
  • 服務消費者與提供者在內(nèi)存中統(tǒng)計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(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接口給前端調(diào)用。同時內(nèi)部通過 Dubbo 實現(xiàn) RPC調(diào)用服務提供者。

<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

服務消費者調(diào)用服務生產(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接口,提供給前端調(diào)用。

@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迭代器中刪除元素的實例操作詳解

    在本篇內(nèi)容里小編給各位分享了一篇關于java迭代器中刪除元素的實例操作詳解內(nèi)容,有興趣的朋友們可以學習下。
    2021-01-01
  • 淺談Java分布式架構下如何實現(xiàn)分布式鎖

    淺談Java分布式架構下如何實現(xiàn)分布式鎖

    這篇文章主要介紹了淺談Java分布式架構下如何實現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java 深入淺出掌握Collection單列集合Set

    Java 深入淺出掌握Collection單列集合Set

    Collection集合類是單列集合類的根接口,用來存儲一系列符合某種規(guī)則的元素。List接口和Set接口是Collection集合類的子接口,其中List接口的常用實現(xiàn)類有ArrayList類、Vector類和LinkedList類;Set接口的常用實現(xiàn)類有HashSet類和TreeSet類
    2021-11-11
  • 淺析JPA分類表的操作函數(shù)

    淺析JPA分類表的操作函數(shù)

    這篇文章主要介紹了JPA分類表的操作函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • 教你怎么用Java獲取國家法定節(jié)假日

    教你怎么用Java獲取國家法定節(jié)假日

    這篇文章主要介紹了教你怎么用Java獲取國家法定節(jié)假日,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • java中a=a+1和a+=1的區(qū)別介紹

    java中a=a+1和a+=1的區(qū)別介紹

    這篇文章主要介紹了java中a=a+1和a+=1的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • futuretask源碼分析(推薦)

    futuretask源碼分析(推薦)

    這篇文章主要介紹了futuretask源碼分析(推薦),小編覺得還是挺不錯的,這里給大家分享下,供各位參考。
    2017-10-10
  • eclipse項目在IDEA中打開并運行的詳細圖文教程

    eclipse項目在IDEA中打開并運行的詳細圖文教程

    這篇文章主要給大家介紹了關于eclipse項目在IDEA中打開并運行的詳細圖文教程,至從使用IDEA開發(fā)工具以來,不少次有使用IDEA運行Eclipse項目或非Maven項目,所以這里給大家總結下,需要的朋友可以參考下
    2023-09-09
  • SpringBoot自定義HttpMessageConverter操作

    SpringBoot自定義HttpMessageConverter操作

    這篇文章主要介紹了SpringBoot自定義HttpMessageConverter的操作,具有很好的參考價值,如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 2020年編程選Java的8大理由,JAVA前景如何

    2020年編程選Java的8大理由,JAVA前景如何

    這篇文章主要介紹了2020年編程選Java的8大理由,JAVA前景如何,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論