以zookeeper为注册中心springmvc集成dubbo的服务实现

来源:互联网 发布:linux常用shell命令 编辑:程序博客网 时间:2024/06/01 22:51

一.创建一个web项目,作为dubbo的消费者

1.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>dataProcessingEngine</groupId><artifactId>TaskInterface</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>TaskInterface Maven Webapp</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>4.1.4.RELEASE</spring.version><jackson.version>2.5.0</jackson.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>task</groupId><artifactId>jobService</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- spring --><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-tx</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-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency><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.4.6</version></dependency><dependency><groupId>com.netflix.curator</groupId><artifactId>curator-framework</artifactId><version>1.1.10</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.6</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0-alpha-1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- mysql连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency><!-- json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.3</version></dependency><!-- 文件上传 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin></plugins></build></project>
2.配置spring-dubbo.xml
 <!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->         <dubbo:application name="项目名称" />    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --><dubbo:annotation package="com.xx.xx.jobinterface.*" />         <!-- 注册中心地址 -->    <dubbo:registry protocol="zookeeper" address="192.168.xx.xx:2181,192.168.xx.xx:2182,192.168.xx.xx:2183" />                  <!-- 协议 -->         <dubbo:protocol name="dubbo" port="20881" />                           <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->    <dubbo:reference id="xxService" check="false" interface="com.xx.ida.jobinterface.service.xxService"/>     <!-- 包扫描 --><context:component-scan base-package="com.xx.ida.jobinterface.*"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><context:component-scan base-package="com.ida"></context:component-scan><!-- s通知事务管理使用注解管理spring动态代理proxy-target-class="false"falsejdk基于接口truecglib基于类 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/>
3.配置springmvc.xml
<!-- 声明扫描包路径 --><context:component-scan base-package="com.xx.ida.jobinterface.controller"></context:component-scan><!-- springMVC基于注解开发的驱动配置 --><mvc:annotation-driven><!-- 用FastJson替换了默认的json序列化方案:Jackson --><mvc:message-converters><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <!-- json的content-type是application/json  支持的格式为json --> <property name="supportedMediaTypes" value="application/json"></property></bean></mvc:message-converters></mvc:annotation-driven><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean><!-- 视图解析器 接收到后端和控制器的返回值,并根据返回值解析出对应的视图 解析过程:前缀(prefix)+返回值+后缀(suffix)=跳转的视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"></property><property name="suffix" value=".jsp"></property></bean><!-- 静态资源访问问题解决             会多注册Handler,且,其url-pattern为 /**             且其会在最后匹配请求,匹配到后,直接导向对应的静态资源--><mvc:default-servlet-handler/>

4.配置web.xml
<web-app id="WebApp_1492051741622">  <display-name></display-name>  <context-param>  <param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value>  </context-param>  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <servlet>  <servlet-name>mvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:/springmvc.xml</param-value>        </init-param>            <load-on-startup>1</load-on-startup>   </servlet>    <servlet-mapping><servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
5.将htt请求传入参数封装成pojo,作为数据传输对象(DTO),将pojo类和暴露的接口打成jar引入到maven项目中。便于代码逻辑的修改

6.创建Manager,控制层(controller)调用manager,manager将参数封装成pojo,并调用暴露的接口
控制层,接收请求,调用Manager
@RequestMapping(value = "/create_MethodJob", method = { RequestMethod.POST })public @ResponseBody CreateJobOutputDto ida_pdata_create_task(String functionname){return jobManager.create(functionname);}
Manager,将参数封装为pojo,并调用暴露的接口

public CreateJobOutputDto create(String functionname){  CreateJobInputDto createJobInputDto = new CreateJobInputDto();  createJobInputDto.setFunctionname(functionname);    return jobService.createTask(createJobInputDto);  } 

二.创建java项目作为dubbo服务的提供者,并打成jar保证在windows或linux可以正常运行

1.首先 要在pom文件里加以下内容(同上),保证打包过程将所有引用jar打进去。并生命jar的入口函数
<plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.dubbo.test.Start</mainClass><!-- 要执行的类得路径 --></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></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><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.dubbo.test.Start</mainClass><!-- 要执行的类得路径 --></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.handlers</resource></transformer><transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>META-INF/spring.schemas</resource></transformer></transformers><shadedArtifactAttached>true</shadedArtifactAttached><!-- optional --><shadedClassifierName>executable</shadedClassifierName></configuration></execution></executions></plugin>

2.然后需要在src/main/resource目录下新建META-INF文件夹在此文件夹下新建MANIFEST.MF、spring.handlers、spring.schemas这三个空文件
maven 命令 assembly:assembly
3.


1 0
原创粉丝点击