zookeeper + dubbo + spring boot

最近開始接觸了分佈式的一些東西,這裏給本身做一個學習筆記。java

這裏只是作一個運行demo,具體的理論知識就不在這裏闡述了。git

 

1.zookeeper的安裝與啓動

下載地址:http://www.apache.org/dyn/closer.cgi/zookeepergithub

下載完成以後,解壓,進入到"conf"目錄下,新建一個"zoo.cfg"web

內容以下:spring

tickTime=2000  
dataDir= /Users/chenqimiao/zookeeper-3.4.8/data 
dataLogDir=/Users/chenqimiao/zookeeper-3.4.8/logs  
clientPort=2181

參數說明:chrome

#tickTime: zookeeper中使用的基本時間單位, 毫秒值.
#dataDir: 數據目錄. 能夠是任意目錄.
#dataLogDir: log目錄, 一樣能夠是任意目錄. 若是沒有設置該參數, 將使用和#dataDir相同的設置.
#clientPort: 監聽client鏈接的端口號.

 

執行apache

以上介紹的就是zookeeper的單機模式。固然還有僞分佈式和分佈式的部署方式,這裏就再也不闡述,有興趣的能夠自行百度。json

 

 

 

 

 

2.dubbo-admin的部署

介於每一個人機子的環境都不盡相同,我建議你們能夠自行打包所需war包。tomcat

我這裏給出一個dubbo的下載地址:http://github.com/alibaba/dubbo,下載所有的文件以後。restful

執行以下命令

以後找到dubbo-master/dubbo-admin/target路徑下面的dubbo-admin-2.5.4-SNAPSHOT.war包。

把這個包丟到tomcat進行部署就ok了。

 

3.利用IDEA構建spring boot生產者和消費者

 

一路next完成以後,在pom中加入以下依賴(dubbo和zookeeper)

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.4.10</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

 

 

接下來先構建一個生產者

來一個測試接口:

 

package com.example.service;

/**
 * Created by chenqimiao on 17/3/24.
 */
public interface TestService {

    String sayHello(String name);

}

來一個實現類

package com.example.service.impl;

import com.example.service.TestService;

/**
 * Created by chenqimiao on 17/3/24.
 */
public class TestServiceImpl implements TestService {

    @Override
    public String sayHello(String name) {

        return "Hello " + name + "!";
    }
}

在resource下面加入一個providers.xml,添加以下配置

<?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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-provider" owner="dubbo-provider"/>
    <dubbo:registry address="zookeeper://localhost:2181" check="false" subscribe="false"/>
    <dubbo:service interface="com.example.service.TestService" ref="testService"/>
    <bean id="testService" class="com.example.service.impl.TestServiceImpl"></bean>

</beans>

啓動類:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(value = {"classpath:providers.xml"})
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

最後在application.properties中加入啓動端口:

server.port=8011

  at last run application!

  那麼咱們就能夠在admin管理界面,看到這個註冊的生產者服務

 

一樣的道理 接下來咱們來構建消費者 。消費者的依賴和生產者一致,這裏再也不重複。

在resource下加入consumer.xml,配置以下

<?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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="dubbo-consumer"/>
    <dubbo:registry check="false" address="zookeeper://localhost:2181"/>
    <dubbo:reference interface="com.example.service.TestService" id="testService"/>
</beans>

來一個controller

package com.example.controller;

import com.example.service.TestService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

/**
 * Created by chenqimiao on 17/3/24.
 */
@Controller
public class TestController {

    @Resource
    private TestService testService;
    @RequestMapping(value = "/" ,produces = "application/json;charset=utf-8")
    @ResponseBody
    public String test(){
        return testService.sayHello("Chenqimiao");
    }
}

 

啓動以後,首先咱們發現服務有了消費者

  

 緊接着,咱們用chrome請求restful接口,消費者服務經過RPC調用請求生產者提供的服務,通過兩層服務調用返回後,chrome獲得最終的response。

 

 

 

 

大體這樣就完成了簡單的分佈式項目構建。但在其中我碰到了一個小小問題 ,不知道社區的朋友有沒有辦法!

IDEA不會檢測dubbo的遠程調用,致使這裏誤報了一個ERROR,有朋友知道怎麼關閉這個錯誤嘛?

相關文章
相關標籤/搜索