dubbo学习(一)

过年回家玩的太嗨,走之前安排的学习计划都忘了,回去什么都没干。现在抽空请教了大神指导,学习dubbo分布式的一些知识,在博客中总结一下。
按照自己的理解dubbo分布式主要的作用是:将前台界面和后台程序分离开来。简单的说就是前台负责:jsp和controller模块;后台负责开接口主要包括:dao层接口、service层接口。前台开发和后台开发可以同步进行,后台(服务提供者)将已完成的接口通过配置文件暴露给前台(服务消费者)。提供者将项目打包成jar,提供给消费者即可。消费者如果要使用提供者的接口,只需要将jar放在WEB-INF/lib下并add to buidpath,在配置文件将提供者暴露的接口引入即可。

测试:
    (1)dc服务消费者
    (2)dp服务提供者
环境:maven3.3.9,jdk1.7 tomcat8
测试dubbo分布式是否成功,需要两个工程(服务提供者、服务消费者)类似于socket编程中的服务器与客户端通信。dp作为服务提供者,写好接口之后暴露给dc服务消费者,启动两个程序,只要dc能够成功调用dp的接口就说明测试成功。
因为tomcat的默认端口8080(当然还有其他的端口,如shutdown)都相同,因此启动第二个tomcat的时候主要修改它的端口号

代码
dc服务消费者
applicationContext_dubbo-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-dubboTest" />
         <!--  
        <dubbo:annotation package="dc.controller" />
         -->
         <!--zookeeper注册中心 
         <dubbo:registry protocol="zookeeper"address="10.57.41.19:2181" /> -->

         <!--使用multicast广播注册中心暴露的服务地址 -->
         <dubbo:registry address="multicast://224.5.6.7:1234" />

         <!-- 协议 -->
         <dubbo:protocol name="dubbo" port="20880" />         

          <!-- 生成远程服务代理,可以和本地bean一样使用demoService-->
         <dubbo:reference id="testDubbo"  interface="dp.dubbo.service.TestDubbo"  check="false"/>

        <!--引入远程服务接口,在一个bean中引用即可    -->
        <bean id = "testMng" class="dc.service.TestMng">
            <property name="testDubbo" ref ="testDubbo" />
        </bean>


</beans>

TestController 测试请求是否成功,返回字符串

@Controller
public class TestController   {

    @Resource
    private TestMng testMng;

//  @Reference(version="1.0.0")
//  private TestDubbo testDubbo;


    @RequestMapping("/test")
    @ResponseBody   //标注为返回java对象
    public String testDo(HttpServletRequest hsrq){
        StringBuffer str = new StringBuffer();
        str.append("test:");

        str.append(testMng.getStr());
        return str.toString();
    }

}

TestMng调用远程服务TestDubbo 接口,其中的getStr方法返回远程服务接口提供的一个字符串

public class TestMng {

    private TestDubbo testDubbo;

    public TestDubbo getTestDubbo() {
        return testDubbo;
    }

    public void setTestDubbo(TestDubbo testDubbo) {
        this.testDubbo = testDubbo;
    }

    public String getStr(){
//      return "TestMng";
        if(testDubbo==null) return "";
        return testDubbo.getStr();
    }

}

dp服务提供者
applicationContext_dubbo-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-dubboTest" />

   <!-- 
  <dubbo:annotation package="dp.dubbo.service" /> -->

  <!--zookeeper注册中心 
  <dubbo:registry protocol="zookeeper" address="10.57.41.19:2181" />-->

  <!--使用multicast广播注册中心暴露服务地址 -->
  <dubbo:registry address="multicast://224.5.6.7:1234" />

  <dubbo:protocol name="dubbo" port="20880" />

   <!-- 暴露给消费者使用的接口 -->
  <dubbo:service interface="dp.dubbo.service.TestDubbo"  ref="testDubboService"/>

    <!--引入一个接口并告知它的实现类 -->
  <bean id="testDubboService"  class="dp.dubbo.service.impl.TestDubboImpl" />   

</beans>

TestDubbo暴露的接口

public interface TestDubbo {
    public String getStr();
}

TestDubboImpl接口的实现类

public class TestDubboImpl implements TestDubbo {

    public String getStr() {
        return "hahahaha get dp String";
    }

}

dp服务提供者工程目录结构:
这里写图片描述

dc服务消费者工程目录结构:
这里写图片描述


测试结果:
启动dc、dp两个项目,在dc项目中调用dp提供的接口,如果返回dp接口给定的字符串即可。
这里写图片描述

测试成功!


附:该项目需要添加的maven依赖

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xuyang</groupId>
  <artifactId>dp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>dp Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <!-- 设置 Spring 的版本 --> 
      <org.springframework.version>3.1.4.RELEASE</org.springframework.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <dependency>  
         <groupId>org.springframework</groupId>  
         <artifactId>spring-context-support</artifactId>  
         <version>${org.springframework.version}</version>
     </dependency>
     <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
        <version>${org.springframework.version}</version> 
    </dependency>
     <!-- dubbo start-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
      <exclusions>
        <exclusion>
            <artifactId>spring</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.3.6</version>
      <exclusions>
        <exclusion>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>
    <!-- dubbo end-->
  </dependencies>
  <build>
    <finalName>dp</finalName>
  </build>
  <packaging>war</packaging>
</project>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值