您的位置:首页 > 编程语言 > Java开发

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

2017-04-21 18:03 543 查看

一.创建一个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:2
b06b
183" />

<!-- 协议 -->
<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"
false	jdk		基于接口
true	cglib	基于类
-->
<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>
<transformer
implementation="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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐