Spring Dubbo整合开发

来源:互联网 发布:购买了域名怎么使用 编辑:程序博客网 时间:2024/05/17 01:44

spring-dubbo-api    服务的接口

spring-dubbo-domain  接口的实现,也是dubbo的生产者

spring-dubbo-web 接口的调用者,消费者


1 spring-dubbo-api  



接口:UserService

package spring.dubbo.api.service;public interface UserService {public String select(String id);}


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>spring.dubbo.test</groupId>  <artifactId>spring-dubbo-api</artifactId>  <version>0.0.1-SNAPSHOT</version></project>

maven创建的时候选的打包方式是jar


2 spring-dubbo-domain



pom.xml 引入spring-dubbo-api 接口包,因为要实现接口,dubbo只能调用接口,所以会有spring-dubbo-api ,没有直接使用类;dubbo zookeeper包 spring包

<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>spring.dubbo.test</groupId><artifactId>spring-dubbo-domain</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.7</java.version><spring.version>3.2.8.RELEASE</spring.version><commons.version>2.2</commons.version></properties><dependencies><!-- 使用dubbo的接口 --><dependency><groupId>spring.dubbo.test</groupId><artifactId>spring-dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><type>jar</type><scope>test</scope></dependency><!-- dubbo,zookeeper包 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.4.10</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.4</version></dependency><!-- spring 包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-test</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-orm</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-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>${spring.version}</version></dependency></dependencies></project>


UserServiceImpl

package spring.dubbo.domain.service;import org.springframework.stereotype.Service;import spring.dubbo.api.service.UserService;@Service("userService")public class UserServiceImpl implements UserService {public String select(String id) {return "{name:这是dubbo调用的服务"+",id:"+id+"}";}}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans  xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:oscache="http://www.springmodules.org/schema/oscache"xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd     http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.1.xsd     http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd     http://www.springmodules.org/schema/oscache     http://www.springmodules.org/schema/cache/springmodules-oscache.xsd    http://www.springframework.org/schema/mvc    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">   <context:annotation-config /><context:component-scan base-package="spring.dubbo.domain.service" /><import resource="user-provider.xml"/> </beans>

user-provider.xml

消费者配置,添加配置后有可能xml会报错,需要下载 dubbo.xsd,我的在 C:\Users\Administrator\Desktop\dubbo\dubbo.xsd,按照window-preferences-xml Catalog-Add


LOCATION放dubbo.xsd的地址,如下


<?xml version="1.0" encoding="UTF-8"?><beans  xmlns="http://www.springframework.org/schema/beans"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            http://code.alibabatech.com/schema/dubbo          http://code.alibabatech.com/schema/dubbo/dubbo.xsd">                  <!-- 提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 --><dubbo:application name="spring-dubbo-domain"/><!-- 提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 -->        <!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry  id="zk1" address="192.168.150.129:2181" protocol="zookeeper" />  <!-- 使用multicast广播注册中心暴露服务地址 -->      <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> -->      <!-- 用dubbo协议在20886端口暴露服务 -->       <dubbo:protocol id="mydubbo"  name="dubbo" port="20886" />        <dubbo:provider registry="zk1"  protocol="mydubbo"/>                   <!-- 声明需要暴露的服务接口 -->      <dubbo:service interface="spring.dubbo.api.service.UserService"   ref="userService" />  </beans>

dubbo注册中心的地址,为zookeeper安装时候配置的,默认本机ip:2181


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_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>spring-dubbo-domain</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>    <!-- 指定spring配置文件位置 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:conf/applicationContext.xml</param-value>    </context-param>    <!-- 启动spring -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener></web-app>


说明:maven创建web项目:创建项目时候选择war包,创建好后,随便在一个其他web项目copy出WEB-INF,放在自己的webapp下即可;


3 spring-dubbo-web



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>spring.dubbo</groupId><artifactId>spring-dubbo-web</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.7</java.version><spring.version>3.2.8.RELEASE</spring.version><commons.version>2.2</commons.version></properties><dependencies><!-- 使用dubbo的接口 --><dependency><groupId>spring.dubbo.test</groupId><artifactId>spring-dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><type>jar</type><scope>test</scope></dependency><!-- dubbo,zookeeper包 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.4.10</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.4</version></dependency><!-- spring 包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-test</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-orm</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-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>${spring.version}</version></dependency><!-- 定时器 --> <dependency>              <groupId>org.quartz-scheduler</groupId>              <artifactId>quartz</artifactId>              <version>1.8.5</version>          </dependency>  </dependencies></project>


UserController

这是一个测试类,spring容器加载完毕,自动执行该方法,这个方法里注入了dubbo提供的接口UserService,如果调用成功说明dubbo已经被成功调用;当然这个类需要在spring的配置里添加<bean class="spring.dubbo.web.controller.UserController"/> ;

package spring.dubbo.web.controller;import java.util.concurrent.TimeUnit;import javax.annotation.Resource;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import spring.dubbo.api.service.UserService;public class UserController implements ApplicationListener<ContextRefreshedEvent>{@Resourceprivate UserService userService;public void onApplicationEvent(ContextRefreshedEvent event) {if(event.getApplicationContext().getParent() == null){System.out.println("这是消费端的应用");System.out.println(userService.select("123"));;}}}


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beans  xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:oscache="http://www.springmodules.org/schema/oscache"xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd     http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.1.xsd     http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd     http://www.springmodules.org/schema/oscache     http://www.springmodules.org/schema/cache/springmodules-oscache.xsd    http://www.springframework.org/schema/mvc    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">   <context:annotation-config /><context:component-scan base-package="spring.dubbo" /><import resource="user-consumer.xml"/> <bean class="spring.dubbo.web.controller.UserController"/> </beans>


user-consumer.xml

<?xml version="1.0" encoding="UTF-8"?><beans  xmlns="http://www.springframework.org/schema/beans"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd            http://code.alibabatech.com/schema/dubbo          http://code.alibabatech.com/schema/dubbo/dubbo.xsd">                  <!-- 提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 --><dubbo:application name="spring-dubbo-web"/>    <!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry  id="zk1" address="192.168.150.129:2181" protocol="zookeeper" />     <dubbo:protocol id="mydubbo"  name="dubbo" port="20886" />       <dubbo:consumer registry="zk1"/>         <dubbo:reference id="userService"  interface="spring.dubbo.api.service.UserService"/>  </beans>


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_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>spring-dubbo-web</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:conf/applicationContext.xml</param-value>  </context-param>  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener></web-app>



测试:测试的时候可以在eclipse启动2个tomcat,不要放在1个里面,2个tomcat的3个端口参数不能相同,否则无法启动。

修改端口参数


测试结果:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
这是消费端的应用
{name:这是dubbo调用的服务,id:123}
三月 13, 2017 5:10:37 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8081"]
三月 13, 2017 5:10:37 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8001"]
三月 13, 2017 5:10:37 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 4040 ms

0 0
原创粉丝点击