【分佈式入門】Dubbo和Zookeeper的基本使用

Dubbo+Zookeeper+Spring+SpringMVC

一 相關概念

1.Dubbo框架圖

在這裏插入圖片描述

2.節點角色說明

Node Role Spec
Provider 提供程序所公開的遠程服務
Consumer 使用者調用遠程服務
Registry 註冊中心負責服務發現和配置
Monitor 監視器計算服務調用的次數和時間
Container 容器管理服務的生存期

二 zookeeper安裝和配置

1.zookeeper下載鏈接

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

以最新的zookeeper-3.5.6爲例,下載二進制源碼包

在這裏插入圖片描述

2.配置zookeeper

解壓到/usr/local/zookeeper下新建data文件夾

在這裏插入圖片描述

修改配置文件的dataDir路徑

#進入conf文件夾
cd /usr/local/zookeeper/conf
#修改配置文件名爲zoo.cfg
mv zoo_sample.cfg zoo.cfg
#編輯zoo.cfg中的dataDir路徑爲新建的data路徑
vim zoo.cfg

在這裏插入圖片描述

3.啓動單機版zookeeper

在這裏插入圖片描述

三 編寫provider

1.pom依賴

<dependencies>
    <dependency>
        <groupId>cn.javak</groupId>
        <artifactId>dubbo-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <!--幹掉spring2-->
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <!--訪問zookeeper的客戶端jar包-->
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.10</version>
    </dependency>
</dependencies>

2.dubbo配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--給當前Provider自定義名字,再monitor或管理工具中區別是哪一個provider-->
    <dubbo:application name="dubbo-service"/>
    <!--配置註冊中心 註冊中心的ip和端口 以及 使用哪種註冊中心-->
    <dubbo:registry address="x.x.x.x:2181" protocol="zookeeper"></dubbo:registry>
    <!--配置端口 使用什麼協議 consumer invoke provider時的端口-->
    <dubbo:protocol name="dubbo" prompt="20880"></dubbo:protocol>
    <!--註冊功能 註冊接口 引用接口實現類bean-->
    <dubbo:service interface="cn.javak.service.HelloService" ref="helloServiceImpl"></dubbo:service>
    <bean id="helloServiceImpl" class="cn.javak.service.impl.HelloServiceImpl"></bean>
</beans>

3.業務接口和實現類

package cn.javak.service;

public interface HelloService {
    String hello(String hello);
}
package cn.javak.service.impl;

import cn.javak.service.HelloService;

public class HelloServiceImpl implements HelloService {
    @Override
    public String hello(String name) {
        return "Hello Dubbo-->傳遞的name爲:"+name;
    }
}

測試類

public class Test01 {
    public static void main(String[] args) {
        //使用spring啓動
        /*ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
        ac.start();*/

        //官方推薦,要求applicationContext-dubbo.xml放在/META-INF/spring中 *.xml
        Main.main(args);
    }
}

注意:配置文件要放在根目錄下META-INF/spring中,spring才能夠捕獲

四 使用dubbo-admin

在tomcat中放入dubbo-admin的war包,啓動tomcat,第一次啓動會失敗

關閉tomcat,修改dubbo.properties

vim WEB-INF/dubbo.properties

將地址改爲zookeeper的真實地址加端口即可

在這裏插入圖片描述

再次啓動,並訪問

在這裏插入圖片描述

顯示HelloService接口註冊成功

Consumer調用

consumer的業務層

@Service
public class TestServiceImpl implements TestService {
    @Reference//獲取該接口的代理對象
    private HelloService helloService;
    @Override
    public String test(String name) {
        //調用provider中提供的功能
        return helloService.hello(name);
    }
}

通過controller層訪問

@Controller
public class HelloController {
    @Autowired
    private TestService testService;
    @ResponseBody
    @RequestMapping("hello")
    public String hello(String name){
        return testService.test(name);
    }
}

在這裏插入圖片描述

發佈了16 篇原創文章 · 獲贊 10 · 訪問量 2467
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章