SpringBoot分佈式 - Dubbo+ZooKeeper

一:介紹

  • ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。
  • Dubbo是Alibaba開源的分佈式服務框架,它最大的特色是按照分層的方式來架構,使用這種方式能夠使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型的角度來看,Dubbo採用的是一種很是簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,因此基於這一點能夠抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

二:入門

1.準備:ZooKeeper安裝

步驟1:下載ZooKeeperhtml

  • 要在你的計算機上安裝ZooKeeper框架,請訪問如下連接並下載最新版本的ZooKeeper。http://zookeeper.apache.org/releases.htmljava

  • 到目前爲止,最新版本的ZooKeeper是3.4.6(ZooKeeper-3.4.6.tar.gz)。git

步驟2:提取tar文件github

  • 使用如下命令提取tar文件
$ cd opt/
$ tar -zxf zookeeper-3.4.6.tar.gz
$ cd zookeeper-3.4.6
$ mkdir data

步驟3:建立配置文件spring

  • 使用命令 vi conf/zoo.cfg 和全部如下參數設置爲起點,打開名爲 conf/zoo.cfg 的配置文件。
$ vi conf/zoo.cfg
tickTime = 2000
dataDir = /path/to/zookeeper/data
clientPort = 2181
initLimit = 5
syncLimit = 2
  • 一旦成功保存配置文件,再次返回終端。你如今能夠啓動zookeeper服務器。

步驟4:啓動ZooKeeper服務器apache

  • 執行如下命令
$ bin/zkServer.sh start
  • 執行此命令後,你將收到如下響應
$ JMX enabled by default
$ Using config: /Users/../zookeeper-3.4.6/bin/../conf/zoo.cfg
$ Starting zookeeper ... STARTED

2.編程 - 須要的依賴

<!--Dubbo與SpringBoot的集成 -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.1.0</version>
    </dependency>
    <!-- zookeeper客戶端 -->
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>

3. 在IDEA新建空白工程

  • spring-boot版本爲1.5
  • 須要創建兩個模塊,服務提供者與服務消費者

3.1 服務提供者

  • 新建模塊provider-ticket並導入步驟2的包編程

  • 1)在目錄下新建service包,在該包下新建一個接口類ruby

package cn.zyzpp.ticket.service;

public interface TicketService {
    String getTicket();
}
  • 2)實現該接口方法
package cn.zyzpp.ticket.service;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/** * Create by yster@foxmail.com 2018/6/4/004 15:57 */
@Component  //Spring註解
@Service    //dubbo的註解
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "<<厲害了,個人國>>";
    }
}
  • 3)application.yml
server:
  port: 8082
dubbo:
  application:
    name: provider-ticket
  registry:
    address: zookeeper://127.0.0.1:2181
  scan:
    base-packages: cn.zyzpp.ticket.service

總結服務器

將服務提供者註冊到註冊中心-->
 1.引入Dubbo和Zookeeper的相關依賴
 2.配置Dubbo的掃描包和註冊中心地址
 3.使用@Service發佈服務

3.2 服務消費者

  • 新建模塊consumer-user並導入步驟2的包架構

  • 1)配置application.yml

server:
  port: 8081
dubbo:
  application:
    name: consumer-user
  registry:
    address: zookeeper://127.0.0.1:2181
  • 2)拷貝服務端的接口類
package cn.zyzpp.ticket.service;

/*必須保證客戶端與服務端的類路徑一致,只保留該接口類便可。*/

public interface TicketService {
    String getTicket();
}
  • 3)使用服務端接口
package cn.zyzpp.user.service;

import cn.zyzpp.ticket.service.TicketService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class UserSerivce{
    @Reference   /*引用接口需註解dubbo的@Reference*/
    private TicketService ticketService;

    public void getHello(){
        String ticket = ticketService.getTicket();
        System.out.println("買到票了:" + ticket);
    }
}
  • 4)測試:服務消費者消費服務
package cn.zyzpp;

import cn.zyzpp.user.service.UserSerivce;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerUserApplicationTests {
    @Autowired
    private UserSerivce userSerivce;

    @Test
    public void contextLoads() {
        userSerivce.getHello();
    }

}
相關文章
相關標籤/搜索