版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、分布式服务框架 dubbo/dubbox 入门示例 dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架。官网首页:http:/dubbo.io/ ,官方用户指南 http:/dubbo.io/User+Guide-zh.htm上面的几张图画得不错,完全可以当做SOA架构的学习资料淘宝将这个项目开源出来以后,得到了不少同行的支持,包括:当当网的扩展版本dubbox :京东的扩展版本jd-hydra: 不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见 中的评论),反到是当当网的扩展版本仍在持续发
2、展,墙内开花墙外香。不管如何,能在阿里、当当、京东这些大型网站正式使用的框架,总不至于差到哪里去。本文下面的示例均基于当当的dubbox版本,由于dubbox并没向maven提交编译后的jar包,所以只能从github clone代码到本地编译得到jar包。编译及测试步骤:(以下步骤全在windows环境中完成)1. 本机先安装github on Windows的客户端,将在path路径中,把git.exe加进去2. 命令行下git clone 把代码拉到本地3.mvn install -Dmaven.test.skip=true 跳过测试编译4. 在本机安装一个zookeeper,参考zoo
3、.cfg如下:tickTime=2000initLimit=10syncLimit=5dataDir=D:/java/zookeeper-3.4.6/datadataLogDir=D:/java/zookeeper-3.4.6/logclientPort=2181server.1=localhost:2287:3387然后输入 bin/zkServer.cmd 启用zookeeper5. intellij Idea中导入源码6. 运行dubboxdubbo-demodubbo-demo-providersrctestjavacomalibabadubbodemoproviderDemoProv
4、ider.java把服务提供方跑起来,成功后,可以在ZK里,用 ls / 看下,会发现zk里多出了一个dubbo的节点,所有服务全注册在这里了7. 运行dubboxdubbo-demodubbo-demo-consumersrctestjavacomalibabadubbodemoconsumerDemoConsumer.java服务销售方调用测试,可以看console里的输出8. 运行dubboxdubbo-demodubbo-demo-consumersrctestjavacomalibabadubbodemoconsumerRestClient.java跑一下rest调用9. 浏览器访问
5、http:/localhost:8888/services/users/100.xml 或http:/localhost:8888/services/users/100.jsondubbox官方的示例,虽然已经很简单了,但是对于初次接触的人来讲,仍然略显复杂,下面的代码在其基础上简化了一下:一、先定义服务接口及传输对象DTO项目结构如下代码:User.java+ View Code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657pa
6、ckage yjmyzz.dubbo.demo.api;import org.codehaus.jackson.annotate.JsonProperty;import javax.validation.constraints.Min;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;i
7、mport javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import java.io.Serializable;XmlRootElementXmlAccessorType(XmlAccessType.FIELD)public class User implements Serializable NotNullMin(1L)private Long id;JsonProperty(username)XmlElement(name = username)NotNullSiz
8、e(min = 6, max = 50)private String name;public User() public User(Long id, String name) this.id = id; = name;public Long getId() return id;public void setId(Long id) this.id = id;public String getName() return name;public void setName(String name) = name;Overridepublic String toSt
9、ring() return User ( +id= + id +, name= + name + +);UserService.java+ View Code?12345package yjmyzz.dubbo.demo.api;public interface UserService User getUser(Long id);UserRestService.java+ View Code?1234567package yjmyzz.dubbo.demo.api;import javax.validation.constraints.Min;public interface UserRest
10、Service User getUser(Min(value = 1L, message = User ID must be greater than 1) Long id);pom.xml 4.0.0 blogs.yjmyzz dubbo-hello-api 0.1 com.alibaba dubbo 2.8.4 javax.validation validation-api 1.0.0.GA javax.annotation javax.annotation-api 1.2 org.codehaus.jackson jackson-mapper-asl 1.9.12 二、定义服务生产者(即
11、:服务接口的实现方)UserServiceImpl.java+ View Code?1234567891011package vider;import yjmyzz.dubbo.demo.api.User;import yjmyzz.dubbo.demo.api.UserService;public class UserServiceImpl implements UserService public User getUser(Long id) return new User(id, username + id);UserRestServiceImpl
12、.java+ View Code?1234567891011121314151617181920212223242526272829303132333435package vider;import com.alibaba.dubbo.rpc.RpcContext;import tocol.rest.support.ContentType;import yjmyzz.dubbo.demo.api.User;import yjmyzz.dubbo.demo.api.UserRestService;impor
13、t yjmyzz.dubbo.demo.api.UserService;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.ws.rs.*;import javax.ws.rs.core.MediaType;Path(users)Consumes(MediaType.APPLICATION_JSON, MediaType.TEXT_XML)Produces(ContentType.APPLICATION_JSON_UTF_8, Conten
14、tType.TEXT_XML_UTF_8)public class UserRestServiceImpl implements UserRestService private UserService userService;public void setUserService(UserService userService) this.userService = userService;GETPath(id : d+)public User getUser(PathParam(id) Long id) if (RpcContext.getContext().getRequest(HttpSe
15、rvletRequest.class) != null) System.out.println(Client IP address from RpcContext: + RpcContext.getContext().getRequest(HttpServletRequest.class).getRemoteAddr();if (RpcContext.getContext().getResponse(HttpServletResponse.class) != null) System.out.println(Response object from RpcContext: + RpcConte
16、xt.getContext().getResponse(HttpServletResponse.class);return userService.getUser(id);DemoProvider.java+ View Code?123456789101112package vider;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;public class DemoProvider public s
17、tatic void main(String args) throws IOException ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(classpath*:META-INF/spring/*.xml);context.start();System.out.println(服务已经启动.);System.in.read();配置文件:resourcesMETA-INFspringdubbo-demo-provider.xml 1 2 3 beans xmlns=http:/www.s
18、/schema/beans 4 xmlns:xsi=/2001/XMLSchema-instance 5 xmlns:dubbo= 6 xsi:schemaLocation=/schema/beans /schema/beans/spring-beans-2.5.xsd 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Vie
19、w Codepom.xml 1 2 5 6 4.0.0 7 8 blogs.yjmyzz 9 dubbo-hello-provider 10 0.1 11 12 13 14 15 16 blogs.yjmyzz 17 dubbo-hello-api 18 0.1 19 20 21 22 com.alibaba 23 dubbo 24 2.8.4 25 26 27 28 org.javassist 29 javassist 30 3.15.0-GA 31 32 33 34 org.apache.mina 35 mina-core 36 1.1.7 37 38 39 40 org.glassfis
20、h.grizzly 41 grizzly-core 42 2.1.4 43 44 45 46 org.apache.httpcomponents 47 httpclient 48 4.2.1 49 50 51 52 com.alibaba 53 fastjson 54 1.1.39 55 56 57 58 com.thoughtworks.xstream 59 xstream 60 1.4.1 61 62 63 64 org.apache.bsf 65 bsf-api 66 3.1 67 68 69 70 org.apache.zookeeper 71 zookeeper 72 3.4.6 7
21、3 74 75 76 com.github.sgroschupf 77 zkclient 78 0.1 79 80 81 82 org.apache.curator 83 curator-framework 84 2.5.0 85 86 87 88 com.googlecode.xmemcached 89 xmemcached 90 1.3.6 91 92 93 94 org.apache.cxf 95 cxf-rt-frontend-simple 96 2.6.1 97 98 99 100 org.apache.cxf101 cxf-rt-transports-http102 2.6.110
22、3 104 105 106 org.apache.thrift107 libthrift108 0.8.0109 110 111 112 com.caucho113 hessian114 4.0.7115 116 117 118 javax.servlet119 javax.servlet-api120 3.1.0121 122 123 124 org.mortbay.jetty125 jetty126 6.1.26127 128 129 org.mortbay.jetty130 servlet-api131 132 133 134 135 136 log4j137 log4j138 1.2.
23、16139 140 141 142 org.slf4j143 slf4j-api144 1.6.2145 146 147 148 redis.clients149 jedis150 2.1.0151 152 153 154 javax.validation155 validation-api156 1.0.0.GA157 158 159 160 org.hibernate161 hibernate-validator162 4.2.0.Final163 164 165 166 javax.cache167 cache-api168 0.4169 170 171 172 org.jboss.re
24、steasy173 resteasy-jaxrs174 3.0.7.Final175 176 177 178 org.jboss.resteasy179 resteasy-client180 3.0.7.Final181 182 183 184 org.jboss.resteasy185 resteasy-netty186 3.0.7.Final187 188 189 190 org.jboss.resteasy191 resteasy-jdk-http192 3.0.7.Final193 194 195 196 org.jboss.resteasy197 resteasy-jackson-p
25、rovider198 3.0.7.Final199 200 201 202 org.jboss.resteasy203 resteasy-jaxb-provider204 3.0.7.Final205 206 207 208 org.apache.tomcat.embed209 tomcat-embed-core210 8.0.11211 212 213 214 org.apache.tomcat.embed215 tomcat-embed-logging-juli216 8.0.11217 218 219 220 com.esotericsoftware.kryo221 kryo222 2.
26、24.0223 224 225 226 de.javakaffee227 kryo-serializers228 0.26229 230 231 232 de.ruedigermoeller233 fst234 1.55235 236 237 238 239 240 View Code测试时,运行DemoProvider中的main方法即可启动服务,所有服务注册在ZooKeeper,层次结构类似下面这样:/dubbo /dubbo/yjmyzz.dubbo.demo.api.UserRestService /dubbo/yjmyzz.dubbo.demo.api.UserRestService
27、/providers /dubbo/yjmyzz.dubbo.demo.api.UserRestService/configurators /dubbo/yjmyzz.dubbo.demo.api.UserService /dubbo/yjmyzz.dubbo.demo.api.UserService/providers /dubbo/yjmyzz.dubbo.demo.api.UserService/configurators三、服务消费方DemoConsumer.java+ View Code?123456789101112131415161718192021222324252627282
28、930313233343536373839404142package yjmyzz.dubbo.demo.consumer;import org.springframework.context.support.ClassPathXmlApplicationContext;import yjmyzz.dubbo.demo.api.UserService;import javax.ws.rs.client.Client;import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.client.WebTarget;import javax.ws.rs.core.Response;public class DemoConsumer public static void main(String args) final String port = 8888;/测试Rest服务getUser(http:/localhost: + port + /services/users/1.json);getUser(http:/localhost: + por
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宾馆信息守秘保证承诺书3篇
- 山东省济南市高新区重点名校2026年语文试题基地校初三毕业班总复习平面向量、复数形成性测试卷语文试题试卷含解析
- 企业网络安全防护年度评估IT部门预案
- 粮库储存粮质量保证承诺书(8篇)
- 2026年财务数据分析与可视化报告
- 2026年高值医用耗材行业未来五年集采影响预测
- 历史隋唐时期的科技与文化课件2025-2026学年统编版七年级历史下册
- 餐饮服务双语·第二版课件 项目七 席间服务
- 水土保持方案报告表公示(模板)
- 管网回填施工方案(3篇)
- 2025年常州纺织服装职业技术学院高职单招(数学)历年真题考点含答案解析
- 内科护理学重点考点
- 初中家庭教育课件
- GB/T 45103-2024肉鸭营养需要量
- 《水库大坝震后安全检查技术指南》
- 第8章 古工程景观鉴赏
- DB 5103T 50-2024 学校食堂食品安全管理规范
- DL-T+961-2020电网调度规范用语
- DB53-T 1253-2024 密集烤房梳式烟夹使用技术规程
- 海洋工程领域新材料与技术
- 风险和机遇识别、评价及控制措施表
评论
0/150
提交评论