Dubbo&maven 聚合初学Demo级别配置展示

来源:互联网 发布:mysql创建唯一约束 编辑:程序博客网 时间:2024/05/21 17:29

Dubbo&DubboX浅谈(Demo级别)

引入

近期阿里爸爸的开源框架dubbo进行的学习探索结合一套自己的小项目完成了一个Maven聚合项目下的为服务框

Dubbo背景

这里不对背景,以及dubbo是什么进行叙述以下链能更好的帮你找到答案

项目搭建背景
这里使用的是一个婚恋社交网站的背景
主要展示maven聚合下的dubbo通过进行跨域服务

相关代码如下

工程如下
这里写图片描述
parent定义依赖管理

    <dependencies>        <dependency>            <groupId>com.Vee</groupId>            <artifactId>Vee-commons</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.Vee</groupId>            <artifactId>Vee-manage-pojo</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.1.0</version>        </dependency>        <dependency>            <groupId>javax.annotation</groupId>            <artifactId>javax.annotation-api</artifactId>            <version>1.2</version>        </dependency>        <dependency>            <groupId>javax.ws.rs</groupId>            <artifactId>javax.ws.rs-api</artifactId>            <version>2.0</version>        </dependency>        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>1.9.12</version>        </dependency>        <!--在此直接引入dubbo-->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>            <version>2.8.4</version>        </dependency>

Doubo接口定义

package com.Vee.dubbo.service;import com.Vee.manage.pojo.UserBase;import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;import javax.ws.rs.*;import javax.ws.rs.core.MediaType;import java.util.List;/** * Created by NZY-PC on 2017/5/5. */@Path("search")@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})public interface DubboSearchRestSerivce {    @POST    @Path("query")    public List<UserBase> toSearch(@QueryParam(value ="AgeBegin") Integer AgeBegin,                                   @QueryParam(value = "AgeEnd") Integer AgeEnd,                                   @QueryParam(value = "BirthCity") String BirthCity,                                   @QueryParam(value = "BirthProvince") String BirthProvince,                                   @QueryParam(value = "College") String College,                                   @QueryParam(value = "Gender") Integer Gender,                                   @QueryParam(value = "MarryStatue") Integer MarryStatue,                                   @QueryParam(value = "Salary") String Salary);}

提供者实现了Vee-dubbo工程中的接口

pom

 <parent>        <groupId>com.Vee</groupId>        <artifactId>Vee-parent</artifactId>        <version>1.0-SNAPSHOT</version>    </parent>    <dependencies>        <dependency>            <groupId>com.Vee</groupId>            <artifactId>Vee-manage-pojo</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>com.Vee</groupId>            <artifactId>Vee-commons</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <!--dubbo依赖-->        <dependency>            <groupId>com.Vee</groupId>            <artifactId>Vee-dubbo</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>        <!--dubbo 服务端依赖 | -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.0.1</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>org.apache.zookeeper</groupId>            <artifactId>zookeeper</artifactId>            <version>3.4.7</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jaxrs</artifactId>            <version>3.0.7.Final</version>        </dependency>        <!--dubbo 服务端依赖 | -->    </dependencies>

提供者实现接口类

package com.Vee.search.dubbo;import com.Vee.dubbo.service.DubboSearchRestSerivce;import com.Vee.manage.pojo.UserBase;import com.Vee.search.service.UserSearchService;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;/** * Created by NZY-PC on 2017/5/5. */public class DubboSearchRestServiceimpl implements DubboSearchRestSerivce{    @Autowired    UserSearchService userSearchService;    public List<UserBase> toSearch(Integer AgeBegin,Integer AgeEnd,                                   String BirthCity,String BirthProvince,                                   String College,Integer Gender,                                   Integer MarryStatue,String Salary){        UserBase userBase = new UserBase();        userBase.setGender(Gender);        userBase.setBirthProvince(BirthProvince);        userBase.setBirthCity(BirthCity);        userBase.setMarryStatue(MarryStatue);        userBase.setCollege(College);        userBase.setSalary(Salary);        List<UserBase> userBaseList = userSearchService.queryUserListByWhere(userBase);        return userBaseList;    }}

提供者serch整合spring的相关配置文件

<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/beans     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    http://code.alibabatech.com/schema/dubbo     http://code.alibabatech.com/schema/dubbo/dubbo.xsd">    <!-- name:用于注册中心计算应用间依赖关系;消费者和提供者应用名称不要一样,此参数不是匹配条件;项目叫什么就填什么 -->    <!-- owner:应用负责人,用于服务治理,请填写负责人公司邮箱前缀 -->    <dubbo:application name="Vee-search" />    <!-- 使用zookeeper注册中心暴露服务地址 -->    <dubbo:registry address="zookeeper://10.8.36.20:2181?backup=10.8.36.21:2181,10.8.36.22:2181" />    <!-- 用dubbo协议在20880端口暴露服务 -->    <!-- <dubbo:protocol name="dubbo" port="20880" /> -->    <!-- 如果ID不填,缺省和name属性值一样,重复则在name后加序号。 -->    <!-- port:dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80  -->    <!-- threadpool:默认fixed -->    <!-- threads:服务线程池大小 -->    <!-- accepts:服务提供方最大可接受连接数 -->    <!-- payload:请求及响应数据包大小限制,单位:字节;默认是8M -->    <dubbo:protocol name="rest" threads="500" port="8084" contextpath="/" server="servlet" accepts="500"        extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter" />    <!-- timeout:远程服务调用超时时间(毫秒) -->    <!-- loadbalance:负载均衡策略,可选值:random,roundrobin,leastactive,分别表示:随机,轮循,最少活跃调用 -->    <dubbo:service interface="com.Vee.dubbo.service.DubboSearchRestSerivce" ref="dubboSearchRestSerivce" protocol="rest" timeout="10000"/>    <!--注册bean不要填写错了,对应接口的实现类-->    <bean id="dubboSearchRestSerivce" class="com.Vee.search.dubbo.DubboSearchRestServiceimpl"/></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="jt-manage" version="2.5">    <display-name>Vee-Search</display-name>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:spring/applicationContext*.xml</param-value>    </context-param>        <!--dubbo  必须在放在最前面监听-->    <listener>        <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class>    </listener>    <!--Spring的ApplicationContext 载入 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- 编码过滤器,以UTF8编码 -->    <filter>        <filter-name>encodingFilter</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF8</param-value>        </init-param>        <init-param>              <param-name>forceEncoding</param-name>              <param-value>true</param-value>          </init-param>     </filter>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <servlet>        <servlet-name>dispatcher</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>dispatcher</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping>    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list></web-app>

消费者

消费者相关pom文件

<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.Vee</groupId>  <artifactId>Vee-web</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>Vee-web Maven Webapp</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <parent>    <groupId>com.Vee</groupId>    <artifactId>Vee-parent</artifactId>    <version>1.0-SNAPSHOT</version>  </parent>  <dependencies>    <dependency>      <groupId>com.Vee</groupId>      <artifactId>Vee-commons</artifactId>      <version>1.0-SNAPSHOT</version>    </dependency>    <dependency>      <groupId>com.Vee</groupId>      <artifactId>Vee-dubbo</artifactId>      <version>1.0-SNAPSHOT</version>    </dependency>    <dependency>      <groupId>com.Vee</groupId>      <artifactId>Vee-manage-mapper</artifactId>      <version>1.0-SNAPSHOT</version>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>javax.servlet-api</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>org.apache.zookeeper</groupId>      <artifactId>zookeeper</artifactId>      <version>3.4.8</version>    </dependency>    <dependency>      <groupId>com.github.abel533</groupId>      <artifactId>mapper</artifactId>      <version>2.3.2</version>    </dependency>    <dependency>      <groupId>javax.validation</groupId>      <artifactId>validation-api</artifactId>      <version>1.1.0.Final</version>    </dependency>    <!-- 文件上传组件 -->    <dependency>      <groupId>commons-fileupload</groupId>      <artifactId>commons-fileupload</artifactId>      <version>${commons-fileupload.version}</version>    </dependency>    <!-- Redis客户端 -->    <dependency>      <groupId>redis.clients</groupId>      <artifactId>jedis</artifactId>      <version>${jedis.version}</version>    </dependency>    <!--httpclient-->    <dependency>      <groupId>org.apache.httpcomponents</groupId>      <artifactId>httpclient</artifactId>      <version>${httpclient.version}</version>    </dependency>    <dependency>      <groupId>org.apache.httpcomponents</groupId>      <artifactId>httpmime</artifactId>      <version>4.3.1</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-websocket</artifactId>      <version>4.0.1.RELEASE</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-messaging</artifactId>      <version>4.0.1.RELEASE</version>    </dependency>  </dependencies></project>

消费者Spring配置文件

<?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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">    <dubbo:application name="Vee-web"/>    <dubbo:registry address="zookeeper://10.8.36.20:2181?backup=10.8.36.21:2181,10.8.36.22:2181" />    <dubbo:reference check="false" id="dubboSearchRestSerivce" interface="com.Vee.dubbo.service.DubboSearchRestSerivce" timeout="10000"/></beans>

消费者调用代码

消费在服务中直接用注入方法注入服务调用方法即可

dubbo&zookeeper

zk作为容器为dubbo提供支持,dubbo中文的图形界面非常亲和易懂具体配置目前在网上已经有很多了在此留下一些链接值得一提的是dubbo的整合中经常出现莫名其妙的依赖错误这些问题会导致启动项目时 直接报错对于找个的解决问题 最好的办法就是梳理一遍本人项目的依赖非常不清晰 因为刚开始做,这一块显得很没有条理还希望多指点对于出现莫名报错的情况 我的选择是,重新放一边依赖重新=。=第一次写 见谅

链接提供

http://blog.csdn.net/aixiaoyang168/article/details/51362675#comments

http://blog.csdn.net/qq1142003960/article/details/45362043