Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,
3个项目
1.web-service接口项目, 定义接口和供调用放引入的dubbo配置。
package com.dubbo.demo; public interface HelloService { String hello(String name); }
<?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>
<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>
package com.dubbo.demo.impl; import com.dubbo.demo.HelloService; public class HelloServiceImpl implements HelloService { @Override public String hello(String name) { return "Hello, " + name + "!"; } }
<?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>
<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>
<?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("====================================="); } }
@Controller @RequestMapping("") public class HelloWorldController { @Autowired private HelloService helloService; @ResponseBody @RequestMapping("hello") public String hello(){ return helloService.hello("hi dubbo"); } }
<?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>