dubbox为dubbo提供REST服务(dubbox + springmvc)
2017-03-01 10:42
621 查看
最近尝试在现有的一个小应用中加入dubbox,进行记录
参考博文:
http://www.bubuko.com/infodetail-484695.html https://segmentfault.com/a/1190000005170426 http://www.cnblogs.com/Gyoung/p/5919205.html http://blog.csdn.net/qq_18675693/article/details/53119871
首先澄清dubbox的主人是当当网,而bubbo是阿里。而restful风格的支持也是在dubbox中才体现的。
在网上死活找不到dubbox的包,结果后来看到dubbo-2.8.4的包其实就是dubbox
dubbox-2.8.0
maven构建
当前版本如下:
dubbo : dubbo-2.5.3
dubbox
: dubbo-2.8.4
由于现没能在maven仓库中找到dubbo-2.8.4版本,从网上下载放入maven中
下载地址:点击打开链接
dubbo的依赖包:点击打开链接
以下是提供者:
pom.xml
有些dubbo依赖包,下载后需要导入到maven本地仓库
ApplicationProvider.xml
使用tomcat启动在dubbo:protocol中server为servlet,contextpath为部署的项目名,port也要和tomcat端口号一致
web.xml
web上下文的配置,dispatcher已经不是
而是dubbo的
接口类
实现类
调用地址:http://localhost:8070/SMSPlatform/users/register?name=lx
参考博文:
http://www.bubuko.com/infodetail-484695.html https://segmentfault.com/a/1190000005170426 http://www.cnblogs.com/Gyoung/p/5919205.html http://blog.csdn.net/qq_18675693/article/details/53119871
首先澄清dubbox的主人是当当网,而bubbo是阿里。而restful风格的支持也是在dubbox中才体现的。
在网上死活找不到dubbox的包,结果后来看到dubbo-2.8.4的包其实就是dubbox
dubbox-2.8.0
maven构建
当前版本如下:
dubbo : dubbo-2.5.3
dubbox
: dubbo-2.8.4
由于现没能在maven仓库中找到dubbo-2.8.4版本,从网上下载放入maven中
下载地址:点击打开链接
dubbo的依赖包:点击打开链接
dubbo-admin-2.8.4.war : 点击打开链接
以下是提供者: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>com.lx</groupId> <artifactId>SMSPlatform</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SMSPlatform</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>3rd-party</id> <name>3rd party</name> <url>http://自己的maven仓库:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>3rd-party</id> <name>3rd party</name> <url>http://自己的maven仓库:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <javax-activation.version>1.1</javax-activation.version> <spring.version>4.1.9.RELEASE</spring.version> <mysql-connector-java.version>5.1.34</mysql-connector-java.version> </properties> <dependencies> <!-- spring start --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</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-context-support</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-dao</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</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-mock</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>org.springframewor 4000 k</groupId> <artifactId>spring-orm</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-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> <!-- spring end --> <!-- http://mvnrepository.com/artifact/org.springframework.data/spring-data-redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.apache.james</groupId> <artifactId>apache-mime4j</artifactId> <version>0.6.1</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.3.1</version> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>commons-discovery</groupId> <artifactId>commons-discovery</artifactId> <version>0.5</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <!-- alibaba --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-common</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-remoting-http</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-api</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-rest</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-webservice</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty</artifactId> <version>3.10.6.Final</version> </dependency> <!-- alibaba end --> <!-- zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.7</version> </dependency> <!-- zkclient end --> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <!-- zookeeper end --> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.12.1.GA</version> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.9</version> </dependency> <dependency> <groupId>net.sf.ezmorph</groupId> <artifactId>ezmorph</artifactId> <version>1.0.6</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.21</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.3.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.4</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.9</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.9</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version> </dependency> <!-- shiro权限依赖包 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.4.0</version> </dependency> <!-- dubbox依赖 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.0.7.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>3.0.7.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> <!-- 如果要使用json序列化 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson-provider</artifactId> <version>3.0.7.Final</version> </dependency> <!-- 如果要使用xml序列化 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>3.0.7.Final</version> </dependency> <!-- 如果要使用tomcat server --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.0.11</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-logging-juli</artifactId> <version>8.0.11</version> </dependency> </dependencies> <build> <finalName>SMSPlatform</finalName> </build> </project>
有些dubbo依赖包,下载后需要导入到maven本地仓库
ApplicationProvider.xml
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd "> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="SMSPlatform" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" check="false" subscribe="false"/> <!-- rest协议定义 port:和服务器端口保持一致 contextpath:和web服务器web.xml定义保持一致,当为servlet时写入项目名 server:默认servlet,在没有在web服务器中运行的时候,可以写tomcat等由应用启动一个web服务器 短连接keepalive="false" --> <dubbo:protocol name="rest" contextpath="SMSPlatform" server="servlet" port="8070" /> <!-- <dubbo:protocol name="dubbo" port="20880" /> --> <!-- 远程服务定义 interface : 服务接口 ref:服务实际实现的service,引用其它定义的spring bean protocol:服务的协议模式 --> <dubbo:service interface="com.zhl.sms.controller.dubbo.IUserService" ref="iUserService" /> <!-- <dubbo:service interface="com.zhl.api.TestLiuxi" ref="testLiuxi" /> --> <!-- 实际服务实现 --> <bean id="iUserService" class="com.zhl.sms.controller.dubbo.RegisterUser" /> <!-- <bean id="testLiuxi" class="com.zhl.sms.controller.dubbo.LiuxiTestImpl" /> --> </beans>
使用tomcat启动在dubbo:protocol中server为servlet,contextpath为部署的项目名,port也要和tomcat端口号一致
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/ f078 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" version="2.5"> <!-- <context-param> <param-name>contextConfigLocation-dubbo</param-name> <param-value>classpath:spring/ApplicationProvider.xml</param-value> </context-param> --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/*.xml</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- <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/ApplicationContext-mvc.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> --> <!-- dubbo start--> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class> <!-- <init-param> <param-name>contextConfigLocation-dubbo</param-name> <param-value>classpath:spring/ApplicationProvider.xml</param-value> </init-param> --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <!-- dubbo end--> <!-- Shiro filter start --> <filter> <filter-name>shiroFilter</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Shiro filter end --> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
web上下文的配置,dispatcher已经不是
org.springframework.web.servlet.DispatcherServlet,
而是dubbo的
com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
接口类
package com.zhl.sms.controller.dubbo; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; @Path("users") public interface IUserService { @GET @Path("register") @Produces("application/json; charset=UTF-8") public String registerUser(@QueryParam("name") String name); }
实现类
package com.zhl.sms.controller.dubbo; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import org.springframework.stereotype.Component; @Component("iUserService") @Path("users") public class RegisterUser implements IUserService{ @GET @Path("register") @Produces("application/json; charset=UTF-8") public String registerUser(@QueryParam("name") String name) { System.out.println("1111"); System.out.println("1111"); System.out.println("1111"); // System.out.println(str); // str = "222222222222222222222"; return "Hello " + name; } }
调用地址:http://localhost:8070/SMSPlatform/users/register?name=lx
相关文章推荐
- dubboX提供rest服务
- jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务
- Spring整合Dubbo对外提供服务
- 【推荐】微服务大型分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- SpringMVC+mybatis+dubbo使用事务导致服务不正常
- 分布式服务--spring mvc +mybatis + Dubbo+Zookeeper+Proxy+Restful
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- 分布式服务:spring mvc +mybatis + Dubbo+Zookeeper+Proxy+Restful
- 【推荐】微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
- 第三章:Dubbo整合maven+spring+springmvc+mybatis之服务消费搭建
- 第二章:Dubbo整合maven+spring+springmvc+mybatis之服务提供者搭建
- 分布式服务--spring mvc +mybatis + Dubbo+Zookeeper+Proxy+Restful
- DUBBO分布式服务框架与SpringMVC+Zookeeper实现服务提供和消费
- 第二章:Dubbo整合maven+spring+springmvc+mybatis之服务提供者搭建
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- 第三章:Dubbo整合maven+spring+springmvc+mybatis之服务消费搭建
- 第三章:Dubbo整合maven+spring+springmvc+mybatis之服务消费搭建
- 【推荐】微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!