Dubbo 的入門案例

前言

本文參考於:
https://segmentfault.com/a/1190000019896723
http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
閱讀本文前,需要先安裝好 Maven 、Zookeeper,使用過 Spring 框架。

最終結果展示

在 zookeeper 的客戶端窗口中查看:

[zk: localhost:2181(CONNECTED) 0]
[zk: localhost:2181(CONNECTED) 0] ls /
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /dubbo
[org.feng.service.ProviderService, com.alibaba.dubbo.monitor.MonitorService]
[zk: localhost:2181(CONNECTED) 2]

程序運行結果:
會在控制檯輸出信息
在這裏插入圖片描述

項目結構

在這裏插入圖片描述

Pom.xml 文件內容

dubbo-demo 的pom

<?xml version="1.0" encoding="UTF-8"?>
<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>org.feng</groupId>
    <artifactId>dubbo-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dubbo-service</module>
        <module>dubbo-consumer</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>

    </dependencies>

</project>

dubbo-service 的pom

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbo-demo</artifactId>
        <groupId>org.feng</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-service</artifactId>


</project>

dubbo-consumer 的pom

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbo-demo</artifactId>
        <groupId>org.feng</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-consumer</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.feng</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

resources 中的配置

log4j.properties 文件

### 設置###
log4j.rootLogger = error,stdout

### 輸出信息到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

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="consumer" owner="feng"/>
    <!--dubbo這個服務所要暴露的服務地址所對應的註冊中心-->
    <!--點對點的方式-->
    <!--<dubbo:registry address="N/A"/>-->
    <dubbo:registry address="zookeeper://localhost:2181" check="false"/>

    <!--點對點的方式:-->
    <!--<dubbo:reference id="providerService" interface="org.feng.service.ProviderService"
                     url="dubbo://192.168.1.45:20880/org.feng.service.ProviderService"/>-->
    <dubbo:reference id="providerService" interface="org.feng.service.ProviderService"/>
</beans>

provider.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="provider" owner="feng">
        <dubbo:parameter key="qos.enable" value="true"/>
        <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
        <dubbo:parameter key="qos.port" value="55555"/>
    </dubbo:application>

    <dubbo:monitor protocol="registry"/>

    <!--dubbo這個服務所要暴露的服務地址所對應的註冊中心-->
    <!--點對點的方式:-->
    <!--<dubbo:registry address="N/A"/>-->
    <dubbo:registry address="zookeeper://localhost:2181" check="false"/>
    <!--當前服務發佈所依賴的協議;webserovice、Thrift、Hessain、http-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--服務發佈的配置,需要暴露的服務接口-->
    <dubbo:service interface="org.feng.service.ProviderService" ref="providerService"/>

    <bean id="providerService" class="org.feng.service.v1.ProviderServiceImpl"/>
</beans>

java 類

dubbo-service中的java類

在這裏插入圖片描述

ProviderService 接口

package org.feng.service;

/**
 * 服務
 */
public interface ProviderService {
    void say(String word);
}

ProviderServiceImpl實現類

package org.feng.service.v1;

import org.feng.service.ProviderService;

/**
 * 服務實現
 */
public class ProviderServiceImpl implements ProviderService {
    public void say(String word) {
        System.out.println("Hello !" + word);
    }
}


App 運行類

package org.feng;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * 啓動服務
 */
public class App {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/provider.xml");

        context.start();
        // 控制檯輸入任何鍵就停止
        System.in.read();
    }
}

dubbo-consumer中的java類

在這裏插入圖片描述

App運行類

package org.feng;

import org.feng.service.ProviderService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;
/**
* 運行消費
*/
public class App {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring/consumer.xml");
        context.start();
        ProviderService providerService = (ProviderService) context.getBean("providerService");
        providerService.say("hello");

        System.in.read();
    }
}

附加

在使用時,按照順序啓動:
zookeeper ->
service 中的 App ->
consumer 中的 App ->

查看結果:在service 的控制檯中查看,是不是有 Hello! hello 這個字符串,與文章開頭時我的截圖是一致的。

至此一個基於 zookeeper 註冊中心的 Dubbo 分佈式服務就搭建好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章