zoukankan      html  css  js  c++  java
  • 分布式服务框架Dubbo入门案例和项目源码

      


    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,

    是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
       官方网站: http://dubbo.io/

        本项目代码,根据官方提供的dubbo-ws-demo-master例子,改造而来。
        官网例子源码:https://github.com/dubbo/dubbo-ws-demo

        官方的例子,都放在1个项目中,接口、实现类、Java应用测试例子。
       
        自己给改造了下,方便在项目中直接使用。
        虽说是HelloWorld,也还是要向实际情况靠拢。


       3个项目




    1.web-service接口项目, 定义接口和供调用放引入的dubbo配置。


     接口HelloService 
     
      package com.dubbo.demo;
    public interface HelloService {
        String hello(String name);
    }



    接口定义的dubbo配置
      
    spring-dubbo.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/beanshttp://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="ws-demo" />
    	<dubbo:registry address="N/A" />
    	<dubbo:reference id="helloService" interface="com.dubbo.demo.HelloService" version="1.0.0"
    				   url="webservice://127.0.0.1:9000/com.dubbo.demo.HelloService"/>
    </beans>


    maven配置
     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/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.shop</groupId>
    	<version>1.0.0-SNAPSHOT</version>
    	<name>web-service</name>
    	<url>http://maven.apache.org</url>;
    	<dependencies>
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>dubbo</artifactId>
    			<version>2.4.10</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.apache.cxf</groupId>
    			<artifactId>cxf-rt-frontend-simple</artifactId>
    			<version>2.6.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.cxf</groupId>
    			<artifactId>cxf-rt-transports-http</artifactId>
    			<version>2.6.1</version>
    		</dependency>
    
    	</dependencies>
    	<build>
    		<finalName>web-service</finalName>
    
    		<plugins>
    			<plugin>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>1.6</source>
    					<target>1.6</target>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    
    		</plugins>
    	</build>
    	<artifactId>web-service</artifactId>
    </project>


    2.web-service-impl接口实现项目

      接口实现类HelloServiceImpl 
    package com.dubbo.demo.impl;
    
    import com.dubbo.demo.HelloService;
    
    public class HelloServiceImpl implements HelloService {
        @Override
        public String hello(String name) {
            return "Hello, " + name + "!";
        }
    }

     
    接口实现dubbo配置
    spring-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/beanshttp://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="ws-demo" />
    
    	<dubbo:registry address="N/A" />
    	
    	<dubbo:protocol name="webservice" port="9000" server="servlet" />
    
    	<bean id="helloService" class="com.dubbo.demo.impl.HelloServiceImpl"/>
    	
    	<dubbo:service interface="com.dubbo.demo.HelloService" version="1.0.0"
    				   protocol="webservice" ref="helloService"/>
    </beans>


    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.shop</groupId>
    	<artifactId>web-service-impl</artifactId>
    	<packaging>war</packaging>
    	<version>1.0.0-SNAPSHOT</version>
    	<name>dubbo-ws Maven Webapp</name>
    	<url>http://maven.apache.org</url>;
    	<dependencies>
    	
    		<dependency>
    			<groupId>com.shop</groupId>
    			<artifactId>web-service</artifactId>
    			<version>1.0.0-SNAPSHOT</version>
    		</dependency>
    		
    	</dependencies>
    	<build>
    		<finalName>web-service-impl</finalName>
    		<plugins>
    			<plugin>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>1.6</source>
    					<target>1.6</target>
    					<encoding>UTF-8</encoding>
    				</configuration>
    			</plugin>
    		
    		</plugins>
    	</build>
    </project>

     
       web.xml配置
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	id="WebApp_ID" version="3.0">
    
    	<display-name>web-service</display-name>
    
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    			classpath*:spring-context.xml
    		</param-value>
    	</context-param>
    
    	<servlet>
    		<servlet-name>dubbo</servlet-name>
    		<servlet-class>
    			com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
    		</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>dubbo</servlet-name>
    		<url-pattern>/*</url-pattern>
    	</servlet-mapping>
    </web-app>

     

    3.接口测试(调用方)项目


    接口调用代码
    import com.dubbo.demo.HelloService;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ConsumerMain {
        public static void main(String[] args) {
            ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring-dubbo.xml");
            classPathXmlApplicationContext.start();
    
            HelloService helloService = (HelloService) classPathXmlApplicationContext.getBean("helloService");
            String world = helloService.hello("World");
    
            System.out.println("=====================================");
            System.out.println(world);
            System.out.println("=====================================");        
        }
    } 



    maven配置
      类似上面的

    Web程序访问
      
    ConsumerMain是通过应用程序的方式,访问Dubbo包装的服务。
     而 

      
    @Controller
    @RequestMapping("")
    public class HelloWorldController {
    
    	@Autowired
    	private HelloService helloService;
    	
    	@ResponseBody
    	@RequestMapping("hello")
    	public String hello(){
    		return helloService.hello("hi dubbo");
    	}
    	
    }



    web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	id="WebApp_ID" version="3.0">
    
    	<display-name>web-service-test</display-name>
    
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>
    			classpath*:spring-context.xml
    		</param-value>
    	</context-param>
    
    	<servlet>
    		<servlet-name>springMvc</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:spring-mvc-servlet.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>springMvc</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    </web-app>




    4.项目测试 
       a.启动服务项目
         web-service-imp
         
       b.启动Java应用程序
    ConsumerMain,打印结果。
          
       c.启动Web应用程序web-service-test,访问http://localhost:9080/hello
       


  • 相关阅读:
    myeclipse部署maven项目到tomcat,src/main/resources里面配置文件部署不到webapp下classes
    MyEclipse自动生成Ant Build.xm
    MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
    解决openoffice进程异常退出的办法:
    【常见Web应用安全问题】---4、Directory traversal
    Errors running builder 'DeploymentBuilder' on project ' 解决方法
    linux CentOS 安装rz和sz命令 lrzsz
    (转)Maven的pom.xml文件结构之Build配置build
    spring整合xfire出现Document root element "beans", must match DOCTYPE root "null"错误解决方案
    linux解压zip、bz、bz2、z、gz、tar(解包)
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462446.html
Copyright © 2011-2022 走看看