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地址,大家在需要的时候可以去官网下载安装

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