IDEA上建立 Maven SpringBoot + zookeeper +dubbo 實例

概述html

  首先聲明,本文是學習總結類型的博客內容,若有雷同純屬學習。本位主要結合zookeeper和dubbo作個簡單實例。目前來講,通常網站架構隨着業務的發展,邏輯愈來愈複雜,數據量愈來愈大,交互愈來愈多以後的常規方案演進歷程。java

其次,當服務愈來愈多以後,咱們須要作哪些服務治理?node

Dubbo主要處理服務,約束服務提供者和消費者之間的關係。Dubbo處理消費者、提供者以及註冊的關係以下:web

Zookeeper使用spring

  ZooKeeper 雖然是一個針對分佈式系統的協調服務,但它自己也是一個分佈式應用程序。ZooKeeper 遵循一個簡單的客戶端-服務器模型,其中客戶端 是使用服務的節點(即機器),而服務器 是提供服務的節點。ZooKeeper 服務器的集合造成了一個 ZooKeeper 集合體(ensemble),這裏簡單記錄Zookeeper使用;apache

  下載地址:http://www.apache.org/dyn/closer.cgi/zookeeper 下載以後,解壓發現裏面有雙擊zkServer.cmd(Window雙擊便可,Linux則須要zkServer.sh)啓動zookeeper。默認打開是2181端口,雙擊zkCli.cmd(Window環境下)啓動客戶端測試下服務端。在客戶端能夠輸入經常使用的zookeeper指令:springboot

1、顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
2、顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據
3、建立文件,並設置初始內容 create [-s] [-e] path data acl 其中-s或-e分別指定節點特性,順序或臨時節點,若不指定,則表示持久節點;
acl用來進行權限控制。舉例使用以下: create /zk "test" 建立一個新的 znode節點「 zk 」以及與它關聯的字符串 4、獲取文件內容: get /zk 確認 znode 是否包含咱們所建立的字符串 5、修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置 6、刪除文件: delete /zk 將剛纔建立的 znode 刪除 7、退出客戶端: quit 8、幫助命令: help

  固然也能夠經過,客戶端管理軟件查詢當前zookeeper的使用狀況。下載:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip   ;解壓縮後點擊ZooInspector\build\zookeeper-dev-ZooInspector.jar   點擊左上角的綠色按鈕,輸入ZK Server的地址和端口,鏈接成功後就能看到ZK的節點數據信息。服務器

代碼編寫架構

Parent編碼app

定義Parent公用項目,裏面的pom.xml內容以下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.justin</groupId>
  <artifactId>parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>parent</name>
  <url>http://maven.apache.org</url>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
  </properties>

  <dependencies>
  <!-- Spring Boot Dubbo 依賴 -->
  <dependency>
    <groupId>io.dubbo.springboot</groupId>
    <artifactId>spring-boot-starter-dubbo</artifactId>
    <version>${dubbo-spring-boot}</version>
  </dependency>
  <!-- Spring Boot Web 依賴 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <!-- Spring Boot Test 依賴 -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

定義公用的實體

package com.justin.dubbo.domain;

import java.io.Serializable;

public class City implements Serializable {

    private static final long serialVersionUID = -1L;

    /**
     * 城市編號
     */
    private Long id;

    /**
     * 省份編號
     */
    private Long provinceId;

    /**
     * 城市名稱
     */
    private String cityName;

    /**
     * 描述
     */
    private String description;

    public City() {
    }

    public City(Long id, Long provinceId, String cityName, String description) {
        this.id = id;
        this.provinceId = provinceId;
        this.cityName = cityName;
        this.description = description;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(Long provinceId) {
        this.provinceId = provinceId;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "City{" +
                "id=" + id +
                ", provinceId=" + provinceId +
                ", cityName='" + cityName + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

定義公用的接口

package com.justin.dubbo.service;

import com.justin.dubbo.domain.City;

public interface CityService {
    public City findCityByName(String cityname);
}

Provider服務提供者代碼

實現公用接口

package com.justin.dubbo.serviceimpl;

import com.justin.dubbo.domain.City;
import com.justin.dubbo.service.CityService;

import com.alibaba.dubbo.config.annotation.Service;

@Service(version = "1.0.0")
public class CityServiceImpl implements CityService {
    public City findCityByName(String cityname) {
        return new City(1L,2L,"溫嶺","是個人故鄉");
    }
}

主程序

@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!Start Service......" );
        SpringApplication.run(App.class);

    }
}

Application.properties內容

## Dubbo 服務提供者配置
#應用名稱
spring.dubbo.application.name=provider
#註冊中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#協議名稱
spring.dubbo.protocol.name=dubbo
#協議端口
spring.dubbo.protocol.port=20880


#服務類包目錄
spring.dubbo.scan=com.justin.dubbo.serviceimplCus服務提供者代碼

Customer消費者調用服務代碼

調用服務代碼項

import com.alibaba.dubbo.config.annotation.Reference;
import com.justin.dubbo.MyCityService.MyServiceCity;
import com.justin.dubbo.domain.City;
import com.justin.dubbo.service.CityService;
import org.springframework.stereotype.Component;

@Component
public class CityServiceImpl implements MyServiceCity
{
    @Reference(version = "1.0.0")//調用服務項
    private CityService cityService;

    @Override
    public void printCity() {
        String cityName="溫嶺";
        City city=cityService.findCityByName(cityName);
        System.out.println(city.toString());
    }
}

主程序

import com.justin.dubbo.MyCityService.MyServiceCity;
import com.justin.dubbo.serviceimpl.CityServiceImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );

        ConfigurableApplicationContext run=  SpringApplication.run(App.class,args);
        MyServiceCity cityService = run.getBean(CityServiceImpl.class);
        cityService.printCity();
    }
}

配置application.properties內容

## 避免和 server 工程端口衝突
server.port=8081

## Dubbo 服務消費者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.justin.dubbo.service

 

參考文章

Zookeeper介紹 

Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例 

從頭開始搭建一個dubbo+zookeeper平臺   

 

實例源碼:   DEMO下載

相關文章
相關標籤/搜索