zoukankan      html  css  js  c++  java
  • dubbo入门之helloWorld

    dubbo官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

    基于spring coloud的demo:http://start.dubbo.io

    dubbo的入门实例还是不够友好啊,我折腾了半天才搞定这个入门demo,废话不说,上代码

    整体的项目结构如下:

    为什么有三个工程呢?

    因为client作为客户端调用服务端其实是调用interface接口,而服务端实现了interface接口,所以才能调用成功,所以打包的时候要把interface单独打成一个包,client和server都需要依赖这个包。

    整个流程很简单,就是启动zookeeper,然后先启动服务端,再启动客户端即可,代码如下:

    interface模块

    HelloInterface.java:

    package com.sawshaw.dubbo_interface;
    
    public interface HelloInterface {
    	public String sayHello(String name);
    
    }
    

    server模块:  

    HelloServiceImpl.java:

    package com.sawshaw.dubbo_server;
    
    import com.sawshaw.dubbo_interface.HelloInterface;
    
    public class HelloServiceImpl implements HelloInterface{
    
    	public String sayHello(String name) {
    		System.out.println("hello server......client send name is "+name);
    		return "hello "+name;
    	}
    
    }
    

    Starter.java:

    package com.sawshaw.dubbo_server;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Starter {
    	public static void main(String[] args) throws Exception {
    			ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
    					new String[] { "applicationContext.xml" });
    			context.start();
    			System.out.println("<<<<<<dubbo server程序启动完成>>>>>>");
    			System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
    		}
    	}
    

    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:tx="http://www.springframework.org/schema/tx"
    	   xmlns:aop="http://www.springframework.org/schema/aop" 
    	   xmlns:context="http://www.springframework.org/schema/context"
    	   xsi:schemaLocation="http://www.springframework.org/schema/beans
    	   http://www.springframework.org/schema/beans/spring-beans.xsd
    	   http://www.springframework.org/schema/tx 
    	   http://www.springframework.org/schema/tx/spring-tx.xsd 
    	   http://www.springframework.org/schema/aop 
    	   http://www.springframework.org/schema/aop/spring-aop.xsd 
           http://www.springframework.org/schema/context 
    	   http://www.springframework.org/schema/context/spring-context.xsd">
    	   
    	<import resource="classpath*:provider.xml"/>
    	<context:component-scan base-package="com.sawshaw.dubbo_server.*"/>
    </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"/>
        <!-- 使用zookeeper注册中心暴露服务地址,这个地址是启动zookeeper默认暴露的地址 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
        <!-- 用dubbo协议在随机端口暴露服务 端口自己设置,如果被占用了就换一个端口 -->
       <dubbo:protocol name="dubbo" port="20880" />
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="com.sawshaw.dubbo_interface.HelloInterface" ref="helloService"/>
        <!-- 和本地bean一样实现服务 -->
        <bean id="helloService" class="com.sawshaw.dubbo_server.HelloServiceImpl"/>
    </beans>
    

    pom.xml:

    <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.sawshaw</groupId>
      <artifactId>dubbo-server</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>dubbo-server</name>
      <url>http://maven.apache.org</url>
    
       <properties>
      		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<spring.version>4.3.17.RELEASE</spring.version>
    		<jpa.version>1.7.1.RELEASE</jpa.version>
    		<log4j2.version>2.7</log4j2.version>
      </properties>
      
      <dependencies>
      <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    	<dependency>
    	    <groupId>org.apache.zookeeper</groupId>
    	    <artifactId>zookeeper</artifactId>
    	    <version>3.4.10</version>
    	    <!--排除log4j必须加上-->
            <exclusions>
                   <exclusion>
                       <groupId>log4j</groupId>
                       <artifactId>log4j</artifactId>
                   </exclusion>
               </exclusions>
    	    <type>pom</type>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
    	<dependency>
    	    <groupId>com.alibaba</groupId>
    	    <artifactId>dubbo</artifactId>
    	    <version>2.6.2</version>
    	    <exclusions>
    		    <exclusion>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring</artifactId>
    			</exclusion>
    	        <exclusion>
    	            <groupId>org.jboss.netty</groupId>
    	            <artifactId>netty</artifactId>
    	        </exclusion>
        	</exclusions>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
    	<dependency>
    	    <groupId>org.apache.curator</groupId>
    	    <artifactId>curator-framework</artifactId>
    	    <version>2.12.0</version>
    	</dependency>
    	
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </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-context-support</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-tx</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-aop</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-web</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-webmvc</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-orm</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-jdbc</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework.data</groupId>
    	    <artifactId>spring-data-jpa</artifactId>
    	    <version>${jpa.version}</version>
    	    <exclusions>
    				<exclusion>
    					<artifactId>slf4j-api</artifactId>
    					<groupId>org.slf4j</groupId>
    				</exclusion>
    			</exclusions>
    	</dependency>
        <dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-expression</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-test</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.slf4j</groupId>
    	    <artifactId>slf4j-api</artifactId>
    	    <version>1.7.25</version>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/log4j/log4j -->
    	<dependency>
    	    <groupId>log4j</groupId>
    	    <artifactId>log4j</artifactId>
    	    <version>1.2.17</version>
    	</dependency>
    	
    	<!-- servlet start-->
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>javax.servlet-api</artifactId>
    		<version>3.1.0</version>
    		<scope>provided</scope>
    	</dependency>
    	<dependency>
    		<groupId>javax.servlet.jsp</groupId>
    		<artifactId>javax.servlet.jsp-api</artifactId>
    		<version>2.3.1</version>
    		<scope>provided</scope>
    	</dependency>
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>jstl</artifactId>
    		<version>1.2</version>
    		<scope>provided</scope>
    	</dependency>
    	<!-- servlet end -->
    	<dependency>
    	    <groupId>com.alibaba</groupId>
    	    <artifactId>fastjson</artifactId>
    	    <version>1.2.47</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.freemarker</groupId>
    	    <artifactId>freemarker</artifactId>
    	    <version>2.3.23</version>
    	</dependency>
    
      </dependencies>
    
      <build>
    		<resources>
    			<resource>
    				<directory>src/main/resource</directory>
    				<includes>
    					<include>*.xml</include>
    				</includes>
    			</resource>
    		</resources>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.5.1</version>
    				<configuration>
    					<srouce>1.7</srouce>
    					<target>1.7</target>
    				</configuration>
    			</plugin>
    
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-shade-plugin</artifactId>
    				<version>1.4</version>
    				<executions>
    					<execution>
    						<phase>package</phase>
    						<goals>
    							<goal>shade</goal>
    						</goals>
    						<configuration>
    							<transformers>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    									<resource>META-INF/spring.handlers</resource>
    								</transformer>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    									<mainClass>com.sawshaw.dubbo_server.Starter</mainClass>
    								</transformer>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    									<resource>META-INF/spring.schemas</resource>
    								</transformer>
    							</transformers>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
    
    		</plugins>
    	</build>
    </project>
    

    client模块

     HelloClient.java:

    package com.sawshaw.dubbo_client;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.sawshaw.dubbo_interface.HelloInterface;
    
    
    public class HelloClient{
    	public static void main(String[] args) {
    		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    		HelloInterface hs = (HelloInterface) context.getBean("helloService");
            String result = hs.sayHello("dubbo");
            System.out.println( "client output...."+result);
    	}
    
    }
    

    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:tx="http://www.springframework.org/schema/tx"
    	   xmlns:aop="http://www.springframework.org/schema/aop" 
    	   xmlns:context="http://www.springframework.org/schema/context"
    	   xsi:schemaLocation="http://www.springframework.org/schema/beans
    	   http://www.springframework.org/schema/beans/spring-beans.xsd
    	   http://www.springframework.org/schema/tx 
    	   http://www.springframework.org/schema/tx/spring-tx.xsd 
    	   http://www.springframework.org/schema/aop 
    	   http://www.springframework.org/schema/aop/spring-aop.xsd 
           http://www.springframework.org/schema/context 
    	   http://www.springframework.org/schema/context/spring-context.xsd">
    	   
    	<import resource="classpath*:consumer.xml"/>
    	<context:component-scan base-package="com.sawshaw.dubbo_client.*"/>
    </beans>
    

      

     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"/>
        <!-- 连接注册中心配置 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" protocol="zookeeper" check="false"/>
        <!-- 生成远程服务代理,可以和本地bean一样使用helloService -->
        <dubbo:reference id="helloService" interface="com.sawshaw.dubbo_interface.HelloInterface"/>
    </beans>
    

      

     pom.xml:

    <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.sawshaw</groupId>
      <artifactId>dubbo-client</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>dubbo-client</name>
      <url>http://maven.apache.org</url>
    
       <properties>
      		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<spring.version>4.3.17.RELEASE</spring.version>
    		<jpa.version>1.7.1.RELEASE</jpa.version>
    		<log4j2.version>2.7</log4j2.version>
      </properties>
    
      <dependencies>
    	<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    	<dependency>
    	    <groupId>org.apache.zookeeper</groupId>
    	    <artifactId>zookeeper</artifactId>
    	    <version>3.4.10</version>
    	    <!--排除log4j必须加上-->
            <exclusions>
                   <exclusion>
                       <groupId>log4j</groupId>
                       <artifactId>log4j</artifactId>
                   </exclusion>
               </exclusions>
    	    <type>pom</type>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
    	<dependency>
    	    <groupId>com.alibaba</groupId>
    	    <artifactId>dubbo</artifactId>
    	    <version>2.6.2</version>
    	    <exclusions>
    		    <exclusion>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring</artifactId>
    			</exclusion>
    	        <exclusion>
    	            <groupId>org.jboss.netty</groupId>
    	            <artifactId>netty</artifactId>
    	        </exclusion>
        	</exclusions>
    	</dependency>
    	<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
    	<dependency>
    	    <groupId>org.apache.curator</groupId>
    	    <artifactId>curator-framework</artifactId>
    	    <version>2.12.0</version>
    	</dependency>
    	
      
          <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </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-context-support</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-tx</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-aop</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-web</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-webmvc</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-orm</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-jdbc</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework.data</groupId>
    	    <artifactId>spring-data-jpa</artifactId>
    	    <version>${jpa.version}</version>
    	    <exclusions>
    				<exclusion>
    					<artifactId>slf4j-api</artifactId>
    					<groupId>org.slf4j</groupId>
    				</exclusion>
    			</exclusions>
    	</dependency>
        <dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-expression</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.springframework</groupId>
    	    <artifactId>spring-test</artifactId>
    	    <version>${spring.version}</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.slf4j</groupId>
    	    <artifactId>slf4j-api</artifactId>
    	    <version>1.7.25</version>
    	</dependency>
    		<dependency>
    	    <groupId>log4j</groupId>
    	    <artifactId>log4j</artifactId>
    	    <version>1.2.17</version>
    	</dependency>
    	<!-- servlet start-->
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>javax.servlet-api</artifactId>
    		<version>3.1.0</version>
    		<scope>provided</scope>
    	</dependency>
    	<dependency>
    		<groupId>javax.servlet.jsp</groupId>
    		<artifactId>javax.servlet.jsp-api</artifactId>
    		<version>2.3.1</version>
    		<scope>provided</scope>
    	</dependency>
    	<dependency>
    		<groupId>javax.servlet</groupId>
    		<artifactId>jstl</artifactId>
    		<version>1.2</version>
    		<scope>provided</scope>
    	</dependency>
    	<!-- servlet end -->
    	<dependency>
    	    <groupId>com.alibaba</groupId>
    	    <artifactId>fastjson</artifactId>
    	    <version>1.2.47</version>
    	</dependency>
    	<dependency>
    	    <groupId>org.freemarker</groupId>
    	    <artifactId>freemarker</artifactId>
    	    <version>2.3.23</version>
    	</dependency>
      </dependencies>
      	<build>
    		<resources>
    			<resource>
    				<directory>src/main/resource</directory>
    				<includes>
    					<include>*.xml</include>
    				</includes>
    			</resource>
    		</resources>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.5.1</version>
    				<configuration>
    					<srouce>1.7</srouce>
    					<target>1.7</target>
    				</configuration>
    			</plugin>
    
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-shade-plugin</artifactId>
    				<version>1.4</version>
    				<executions>
    					<execution>
    						<phase>package</phase>
    						<goals>
    							<goal>shade</goal>
    						</goals>
    						<configuration>
    							<transformers>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    									<resource>META-INF/spring.handlers</resource>
    								</transformer>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    									<mainClass>com.sawshaw.dubbo_client.HelloClient</mainClass>
    								</transformer>
    								<transformer
    									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
    									<resource>META-INF/spring.schemas</resource>
    								</transformer>
    							</transformers>
    						</configuration>
    					</execution>
    				</executions>
    			</plugin>
    
    		</plugins>
    	</build>
    </project>
    

      

    需要注意的几点:pom记得把dubbo的netty依赖和spring依赖去掉,把zookeeper去掉log4j依赖。 

    链接:https://pan.baidu.com/s/1AWlWAmzQyAFFAdhqvzhEvw 密码:9jz3

      

  • 相关阅读:
    Python
    Python
    Python
    Python
    Python
    Python
    Python
    python
    对象
    py常用模块
  • 原文地址:https://www.cnblogs.com/JAYIT/p/9642389.html
Copyright © 2011-2022 走看看