Dubbod的深入理解(3)

在這一篇主要講解怎麼配置運行一個dubbo程序(在此之前,大家首先去下載zookeeper註冊中心,並且安裝好,我這裏用的是公司的註冊中心IP)


首先是provider層的一些配置


Provider:


首先建立了一個maven項目,因爲Dubbo需用Spring去加載Dubbo的配置即可,Dubbo基於SpringSchema擴展進行加載,所以

pom裏面配置spring相關的配置


org.springframework.aop ——Spring的面向切面編程,提供AOP(面向切面編程)的實現

org.springframework.asm——spring2.5.6的時候需要asm jar包,spring3.0開始提供它自己獨立的asm jar包

org.springframework.core——Spring的核心工具包,其他包依賴此包

org.springframework.beans——所有應用都用到,包含訪問配置文件,創建和管理bean等,是Spring IOC的基礎實現。

org.springframework.context——提供在基礎IOC功能上的擴展服務,此外還提供許多企業級服務的支持,有郵件服務、任務調度、

JNDI定位,EJB集成、遠程訪問、緩存以及多種視圖層框架的支持。

org.springframework.expression——Spring表達式語言

還有dubbo的配置,用的dubbo版本是2.5.3版本

Zookeeper配置,用的是3.3.6版本


 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>com.provider</groupId>
    <artifactId>provider</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>dubboserver</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>3.1.4.RELEASE</spring.version>
        <slf4j.version>1.6.6</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-asm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- spring end -->
        <!-- log -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <!-- zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.3.6</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>dubbo-demo</finalName>
        <plugins>
            <!-- 非多個資源配置 start-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                    <encoding>UTF-8</encoding>
                    <failOnError>false</failOnError>
                </configuration>
            </plugin>
            <!-- 非多個資源配置 end-->
        </plugins>
    </build>

</project>


然後呢配置ApplicationContext.xml的配置文件信息

Provider:

主要配置四個方面的東西,

(1)     具體的實現bean

(2)     提供方的應用信息,提供依賴關係

(3)     使用zookeeper註冊中心暴露接口

(4)     用dubbo協議在某個端口暴露服務

(5)     聲明需要暴露的服務接口


<?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 ">
    <!-- 具體的實現bean -->
    <bean id="testService" class="com.provider.dubbo.serviceImpl.TestServiceImpl" />
    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:application name="providerTest"  />
    <!-- 使用zookeeper註冊中心暴露服務地址 -->
    <dubbo:registry address="zookeeper://IP地址" />
    <!-- dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20885" />
    <!-- 聲明需要暴露的服務接口 -->
    <dubbo:service interface="com.provider.dubbo.service.TestService" ref="testService" />
</beans>

然後就是提供者需要提供什麼接口了

首先我定義了一個ServiceTest接口


package com.provider.dubbo.service;

/**
 * Created by WUYAO873 on 2017/8/14.
 */
public interface TestService {
 public String getName();
}


然後寫出它的實現類ServceTestImpl


package com.provider.dubbo.serviceImpl;

import com.provider.dubbo.service.TestService;

import java.io.Serializable;

/**
 * Created by WUYAO873 on 2017/8/14.
 */
public class TestServiceImpl implements TestService,Serializable {


    public String getName() {
        return "我是提供者";
    }

}

最後建立了一個測試類TestServiceTest


package com.provider.dubbo;


import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * Created by WUYAO873 on 2017/8/14.
 */
public class TestServiceTest {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"applicationContext.xml"});
        context.start();

        System.out.println("提供服務者已經註冊");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


這時候我們的提供者就配置好了



這個是整個provider結構圖



下面我們配置消費者

Consumer:

消費者層的配置pom配置和提供者的配置類似(可以拷貝),只是增加了一個依賴包,依賴於providor的groupId,artifactId和Version.

 

然後基本的版本配置就是這樣,接下來需要配置一些bean信息和zookeeper的信息,配置在applicationContxt.Xml裏面

Consumer的ApplicationContext.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" />
    <!-- 使用multicast廣播註冊中心暴露發現服務地址 -->
    <dubbo:registry  protocol="zookeeper" address="zookeeper://ID地址" />
    <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->
    <dubbo:reference id="testService" interface="com.provider.dubbo.service.TestService" />

</beans>


接下來我們寫一個測試類ConsumerServiceTest


package com.provider.dubbo.service;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class ConsumerServiceTest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
        context.start();
        TestService testService = (TestService) context.getBean("testService");
        System.out.println(testService.getName());
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

這是整個Consumer的結構圖


這樣下來我們就配置好了,


接下來我們先要啓動zookeeper註冊中心,


然後啓動我們的提供者provider的測試類TestServiceTest




這樣呢,我們就已經把接口暴露在了註冊中心,我們在消費者就可以拿到

這個時候我們就可以早zookeeper的註冊中心查到自己註冊的提供者

(1)


(2)


也可以根據你在provider的配置文件裏面的提供者應用名查詢



運行消費者的ConsumerServiceTest類




運行成功,得到提供者的提供信息,


我這裏用的zookeeper註冊中心是用公司的IP地址,大家在需要的時候可以去官網下載安裝

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