本文为转载
作者:菩提树下的杨过

出处:http://yjmyzz.cnblogs.com

dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架。

官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm上面的几张图画得不错,完全可以当做SOA架构的学习资料

淘宝将这个项目开源出来以后,得到了不少同行的支持,包括:

当当网的扩展版本dubbox :https://github.com/dangdangdotcom/dubbox

京东的扩展版本jd-hydra: http://www.oschina.net/p/jd-hydra

不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是当当网的扩展版本仍在持续发展,墙内开花墙外香。

不管如何,能在阿里、当当、京东这些大型网站正式使用的框架,总不至于差到哪里去。

本文下面的示例均基于当当的dubbox版本,由于dubbox并没向maven提交编译后的jar包,所以只能从github clone代码到本地编译得到jar包。

编译及测试步骤:(以下步骤全在windows环境中完成)

1. 本机先安装github on Windows的客户端,将在path路径中,把git.exe加进去

2. 命令行下 git clone https://github.com/dangdangdotcom/dubbox 把代码拉到本地

3.mvn install -Dmaven.test.skip=true 跳过测试编译

4. 在本机安装一个zookeeper,参考zoo.cfg如下:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=D:/java/zookeeper-3.4.6/data

dataLogDir=D:/java/zookeeper-3.4.6/log

clientPort=2181

server.1=localhost:2287:3387

然后输入 bin/zkServer.cmd 启用zookeeper

5. intellij Idea中导入源码

6. 运行 \dubbox\dubbo-demo\dubbo-demo-provider\src\test\java\com\alibaba\dubbo\demo\provider\DemoProvider.java

把服务提供方跑起来,成功后,可以在ZK里,用 ls / 看下,会发现zk里多出了一个dubbo的节点,所有服务全注册在这里了

7. 运行\dubbox\dubbo-demo\dubbo-demo-consumer\src\test\java\com\alibaba\dubbo\demo\consumer\DemoConsumer.java

服务消费方调用测试,可以看console里的输出

8. 运行\dubbox\dubbo-demo\dubbo-demo-consumer\src\test\java\com\alibaba\dubbo\demo\consumer\RestClient.java

跑一下rest调用

9. 浏览器访问 http://localhost:8888/services/users/100.xml 或 http://localhost:8888/services/users/100.json

dubbox官方的示例,虽然已经很简单了,但是对于初次接触的人来讲,仍然略显复杂,下面的代码在其基础上简化了一下:

一、先定义服务接口及传输对象DTO

项目结构如下

代码:

User.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package  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;
import  javax.xml.bind.annotation.XmlElement;
import  javax.xml.bind.annotation.XmlRootElement;
import  java.io.Serializable;
@XmlRootElement
@XmlAccessorType (XmlAccessType.FIELD)
public  class  User  implements  Serializable {
     @NotNull
     @Min (1L)
     private  Long id;
     @JsonProperty ( "username" )
     @XmlElement (name =  "username" )
     @NotNull
     @Size (min =  6 , max =  50 )
     private  String name;
     public  User() {
     }
     public  User(Long id, String name) {
         this .id = id;
         this .name = name;
     }
     public  Long getId() {
         return  id;
     }
     public  void  setId(Long id) {
         this .id = id;
     }
     public  String getName() {
         return  name;
     }
     public  void  setName(String name) {
         this .name = name;
     }
     @Override
     public  String toString() {
         return  "User ("  +
                 "id="  + id +
                 ", name='"  + name + '\ ''  +
                 ')' ;
     }
}

UserService.java

1
2
3
4
5
package  yjmyzz.dubbo.demo.api;
public  interface  UserService {
     User getUser(Long id);
}

UserRestService.java

1
2
3
4
5
6
7
package  yjmyzz.dubbo.demo.api;
import  javax.validation.constraints.Min;
public  interface  UserRestService {
     User getUser( @Min (value = 1L, message =  "User ID must be greater than 1" ) Long id);
}

pom.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <projectxmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
6     <modelVersion>4.0.0</modelVersion>
7
8     <groupId>com.cnblogs.yjmyzz</groupId>
9     <artifactId>dubbo-hello-api</artifactId>
10     <version>0.1</version>
11
12     <dependencies>
13
14         <dependency>
15             <groupId>com.alibaba</groupId>
16             <artifactId>dubbo</artifactId>
17             <version>2.8.4</version>
18         </dependency>
19
20         <dependency>
21             <groupId>javax.validation</groupId>
22             <artifactId>validation-api</artifactId>
23             <version>1.0.0.GA</version>
24         </dependency>
25
26         <dependency>
27             <groupId>javax.annotation</groupId>
28             <artifactId>javax.annotation-api</artifactId>
29             <version>1.2</version>
30         </dependency>
31
32         <dependency>
33             <groupId>org.codehaus.jackson</groupId>
34             <artifactId>jackson-mapper-asl</artifactId>
35             <version>1.9.12</version>
36         </dependency>
37
38     </dependencies>
39 </project>

二、定义服务生产者(即:服务接口的实现方)

UserServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
package  yjmyzz.dubbo.demo.provider;
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.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package  yjmyzz.dubbo.demo.provider;
import  com.alibaba.dubbo.rpc.RpcContext;
import  com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;
import  yjmyzz.dubbo.demo.api.User;
import  yjmyzz.dubbo.demo.api.UserRestService;
import  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, ContentType.TEXT_XML_UTF_8})
public  class  UserRestServiceImpl  implements  UserRestService {
     private  UserService userService;
     public  void  setUserService(UserService userService) {
         this .userService = userService;
     }
     @GET
     @Path ( "{id : \\d+}" )
     public  User getUser( @PathParam ( "id" ) Long id) {
         if  (RpcContext.getContext().getRequest(HttpServletRequest. 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: "  + RpcContext.getContext().getResponse(HttpServletResponse. class ));
         }
         return  userService.getUser(id);
     }
}

DemoProvider.java

1
2
3
4
5
6
7
8
9
10
11
12
package  yjmyzz.dubbo.demo.provider;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
import  java.io.IOException;
public  class  DemoProvider {
     public  static  void  main(String[] args)  throws  IOException {
         ClassPathXmlApplicationContext context =  new  ClassPathXmlApplicationContext( "classpath*:META-INF/spring/*.xml" );
         context.start();
         System.out.println( "服务已经启动..." );
         System.in.read();
     }
}

配置文件:resources\META-INF\spring\dubbo-demo-provider.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <beansxmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd7 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
8
9     <dubbo:applicationname="demo-provider"owner="programmer"organization="dubbox"/>
10
11     <dubbo:registryaddress="zookeeper://127.0.0.1:2181"/>
12
13     <dubbo:protocolname="dubbo"serialization="kryo"optimizer="yjmyzz.dubbo.demo.api.SerializationOptimizerImpl"/>
14
15     <!--use tomcat server-->
16     <dubbo:protocolname="rest"port="8888"threads="500"contextpath="services"server="tomcat"accepts="500"
17 extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>
18
19
20     <dubbo:serviceinterface="yjmyzz.dubbo.demo.api.UserService"ref="userService"protocol="dubbo" />
21
22     <dubbo:serviceinterface="yjmyzz.dubbo.demo.api.UserRestService"ref="userRestService"protocol="rest"validation="true"/>
23
24     <beanid="userService"class="yjmyzz.dubbo.demo.provider.UserServiceImpl"/>
25
26     <beanid="userRestService"class="yjmyzz.dubbo.demo.provider.UserRestServiceImpl">
27         <propertyname="userService"ref="userService"/>
28     </bean>
29
30
31 </beans>

pom.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <projectxmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
6     <modelVersion>4.0.0</modelVersion>
7
8     <groupId>com.cnblogs.yjmyzz</groupId>
9     <artifactId>dubbo-hello-provider</artifactId>
10     <version>0.1</version>
11
12     <dependencies>
13
14         <!--公用的服务接口-->
15         <dependency>
16             <groupId>com.cnblogs.yjmyzz</groupId>
17             <artifactId>dubbo-hello-api</artifactId>
18             <version>0.1</version>
19         </dependency>
20
21         <dependency>
22             <groupId>com.alibaba</groupId>
23             <artifactId>dubbo</artifactId>
24             <version>2.8.4</version>
25         </dependency>
26
27         <dependency>
28             <groupId>org.javassist</groupId>
29             <artifactId>javassist</artifactId>
30             <version>3.15.0-GA</version>
31         </dependency>
32
33         <dependency>
34             <groupId>org.apache.mina</groupId>
35             <artifactId>mina-core</artifactId>
36             <version>1.1.7</version>
37         </dependency>
38
39         <dependency>
40             <groupId>org.glassfish.grizzly</groupId>
41             <artifactId>grizzly-core</artifactId>
42             <version>2.1.4</version>
43         </dependency>
44
45         <dependency>
46             <groupId>org.apache.httpcomponents</groupId>
47             <artifactId>httpclient</artifactId>
48             <version>4.2.1</version>
49         </dependency>
50
51         <dependency>
52             <groupId>com.alibaba</groupId>
53             <artifactId>fastjson</artifactId>
54             <version>1.1.39</version>
55         </dependency>
56
57         <dependency>
58             <groupId>com.thoughtworks.xstream</groupId>
59             <artifactId>xstream</artifactId>
60             <version>1.4.1</version>
61         </dependency>
62
63         <dependency>
64             <groupId>org.apache.bsf</groupId>
65             <artifactId>bsf-api</artifactId>
66             <version>3.1</version>
67         </dependency>
68
69         <dependency>
70             <groupId>org.apache.zookeeper</groupId>
71             <artifactId>zookeeper</artifactId>
72             <version>3.4.6</version>
73         </dependency>
74
75         <dependency>
76             <groupId>com.github.sgroschupf</groupId>
77             <artifactId>zkclient</artifactId>
78             <version>0.1</version>
79         </dependency>
80
81         <dependency>
82             <groupId>org.apache.curator</groupId>
83             <artifactId>curator-framework</artifactId>
84             <version>2.5.0</version>
85         </dependency>
86
87         <dependency>
88             <groupId>com.googlecode.xmemcached</groupId>
89             <artifactId>xmemcached</artifactId>
90             <version>1.3.6</version>
91         </dependency>
92
93         <dependency>
94             <groupId>org.apache.cxf</groupId>
95             <artifactId>cxf-rt-frontend-simple</artifactId>
96             <version>2.6.1</version>
97         </dependency>
98
99         <dependency>
100             <groupId>org.apache.cxf</groupId>
101             <artifactId>cxf-rt-transports-http</artifactId>
102             <version>2.6.1</version>
103         </dependency>
104
105         <dependency>
106             <groupId>org.apache.thrift</groupId>
107             <artifactId>libthrift</artifactId>
108             <version>0.8.0</version>
109         </dependency>
110
111         <dependency>
112             <groupId>com.caucho</groupId>
113             <artifactId>hessian</artifactId>
114             <version>4.0.7</version>
115         </dependency>
116
117         <dependency>
118             <groupId>javax.servlet</groupId>
119             <artifactId>javax.servlet-api</artifactId>
120             <version>3.1.0</version>
121         </dependency>
122
123         <dependency>
124             <groupId>org.mortbay.jetty</groupId>
125             <artifactId>jetty</artifactId>
126             <version>6.1.26</version>
127             <exclusions>
128                 <exclusion>
129                     <groupId>org.mortbay.jetty</groupId>
130                     <artifactId>servlet-api</artifactId>
131                 </exclusion>
132             </exclusions>
133         </dependency>
134
135         <dependency>
136             <groupId>log4j</groupId>
137             <artifactId>log4j</artifactId>
138             <version>1.2.16</version>
139         </dependency>
140
141         <dependency>
142             <groupId>org.slf4j</groupId>
143             <artifactId>slf4j-api</artifactId>
144             <version>1.6.2</version>
145         </dependency>
146
147         <dependency>
148             <groupId>redis.clients</groupId>
149             <artifactId>jedis</artifactId>
150             <version>2.1.0</version>
151         </dependency>
152
153         <dependency>
154             <groupId>javax.validation</groupId>
155             <artifactId>validation-api</artifactId>
156             <version>1.0.0.GA</version>
157         </dependency>
158
159         <dependency>
160             <groupId>org.hibernate</groupId>
161             <artifactId>hibernate-validator</artifactId>
162             <version>4.2.0.Final</version>
163         </dependency>
164
165         <dependency>
166             <groupId>javax.cache</groupId>
167             <artifactId>cache-api</artifactId>
168             <version>0.4</version>
169         </dependency>
170
171         <dependency>
172             <groupId>org.jboss.resteasy</groupId>
173             <artifactId>resteasy-jaxrs</artifactId>
174             <version>3.0.7.Final</version>
175         </dependency>
176
177         <dependency>
178             <groupId>org.jboss.resteasy</groupId>
179             <artifactId>resteasy-client</artifactId>
180             <version>3.0.7.Final</version>
181         </dependency>
182
183         <dependency>
184             <groupId>org.jboss.resteasy</groupId>
185             <artifactId>resteasy-netty</artifactId>
186             <version>3.0.7.Final</version>
187         </dependency>
188
189         <dependency>
190             <groupId>org.jboss.resteasy</groupId>
191             <artifactId>resteasy-jdk-http</artifactId>
192             <version>3.0.7.Final</version>
193         </dependency>
194
195         <dependency>
196             <groupId>org.jboss.resteasy</groupId>
197             <artifactId>resteasy-jackson-provider</artifactId>
198             <version>3.0.7.Final</version>
199         </dependency>
200
201         <dependency>
202             <groupId>org.jboss.resteasy</groupId>
203             <artifactId>resteasy-jaxb-provider</artifactId>
204             <version>3.0.7.Final</version>
205         </dependency>
206
207         <dependency>
208             <groupId>org.apache.tomcat.embed</groupId>
209             <artifactId>tomcat-embed-core</artifactId>
210             <version>8.0.11</version>
211         </dependency>
212
213         <dependency>
214             <groupId>org.apache.tomcat.embed</groupId>
215             <artifactId>tomcat-embed-logging-juli</artifactId>
216             <version>8.0.11</version>
217         </dependency>
218
219         <dependency>
220             <groupId>com.esotericsoftware.kryo</groupId>
221             <artifactId>kryo</artifactId>
222             <version>2.24.0</version>
223         </dependency>
224
225         <dependency>
226             <groupId>de.javakaffee</groupId>
227             <artifactId>kryo-serializers</artifactId>
228             <version>0.26</version>
229         </dependency>
230
231         <dependency>
232             <groupId>de.ruedigermoeller</groupId>
233             <artifactId>fst</artifactId>
234             <version>1.55</version>
235         </dependency>
236
237     </dependencies>
238
239
240 </project>

测试时,运行DemoProvider中的main方法即可启动服务,所有服务注册在ZooKeeper,层次结构类似下面这样:

/dubbo/dubbo/yjmyzz.dubbo.demo.api.UserRestService/dubbo/yjmyzz.dubbo.demo.api.UserRestService/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package  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:"  + port +  "/services/users/1.xml" );
         //测试常规服务
         ClassPathXmlApplicationContext context =  new  ClassPathXmlApplicationContext( "classpath*:META-INF/spring/*.xml" );
         context.start();
         UserService userService = context.getBean(UserService. class );
         System.out.println(userService.getUser(1L));
     }
     private  static  void  getUser(String url) {
         System.out.println( "Getting user via "  + url);
         Client client = ClientBuilder.newClient();
         WebTarget target = client.target(url);
         Response response = target.request().get();
         try  {
             if  (response.getStatus() !=  200 ) {
                 throw  new  RuntimeException( "Failed with HTTP error code : "  + response.getStatus());
             }
             System.out.println( "Successfully got result: "  + response.readEntity(String. class ));
         finally  {
             response.close();
             client.close();
         }
     }
}

配置文件:resources\META-INF\spring\dubbo-hello-consumer.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beansxmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd6 http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
7
8     <dubbo:applicationname="demo-consumer"owner="programmer"organization="dubbox"/>
9
10     <dubbo:registryaddress="zookeeper://127.0.0.1:2181"/>
11
12     <dubbo:referenceid="userRestService"interface="yjmyzz.dubbo.demo.api.UserRestService"/>
13
14     <dubbo:referenceid="userService"interface="yjmyzz.dubbo.demo.api.UserService"/>
15
16 </beans>

pom.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <projectxmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
6     <modelVersion>4.0.0</modelVersion>
7
8     <groupId>com.cnblogs.yjmyzz</groupId>
9     <artifactId>dubbo-hello-consumer</artifactId>
10     <version>0.1</version>
11
12
13     <dependencies>
14         <!--公用的服务接口-->
15         <dependency>
16             <groupId>com.cnblogs.yjmyzz</groupId>
17             <artifactId>dubbo-hello-api</artifactId>
18             <version>0.1</version>
19         </dependency>
20
21
22         <dependency>
23             <groupId>com.alibaba</groupId>
24             <artifactId>dubbo</artifactId>
25             <version>2.8.4</version>
26         </dependency>
27
28         <dependency>
29             <groupId>org.javassist</groupId>
30             <artifactId>javassist</artifactId>
31             <version>3.15.0-GA</version>
32         </dependency>
33
34         <dependency>
35             <groupId>org.apache.mina</groupId>
36             <artifactId>mina-core</artifactId>
37             <version>1.1.7</version>
38         </dependency>
39
40         <dependency>
41             <groupId>org.glassfish.grizzly</groupId>
42             <artifactId>grizzly-core</artifactId>
43             <version>2.1.4</version>
44         </dependency>
45
46         <dependency>
47             <groupId>org.apache.httpcomponents</groupId>
48             <artifactId>httpclient</artifactId>
49             <version>4.2.1</version>
50         </dependency>
51
52         <dependency>
53             <groupId>com.alibaba</groupId>
54             <artifactId>fastjson</artifactId>
55             <version>1.1.39</version>
56         </dependency>
57
58         <dependency>
59             <groupId>com.thoughtworks.xstream</groupId>
60             <artifactId>xstream</artifactId>
61             <version>1.4.1</version>
62         </dependency>
63
64         <dependency>
65             <groupId>org.apache.bsf</groupId>
66             <artifactId>bsf-api</artifactId>
67             <version>3.1</version>
68         </dependency>
69
70         <dependency>
71             <groupId>org.apache.zookeeper</groupId>
72             <artifactId>zookeeper</artifactId>
73             <version>3.4.6</version>
74         </dependency>
75
76         <dependency>
77             <groupId>com.github.sgroschupf</groupId>
78             <artifactId>zkclient</artifactId>
79             <version>0.1</version>
80         </dependency>
81
82         <dependency>
83             <groupId>org.apache.curator</groupId>
84             <artifactId>curator-framework</artifactId>
85             <version>2.5.0</version>
86         </dependency>
87
88         <dependency>
89             <groupId>com.googlecode.xmemcached</groupId>
90             <artifactId>xmemcached</artifactId>
91             <version>1.3.6</version>
92         </dependency>
93
94         <dependency>
95             <groupId>org.apache.cxf</groupId>
96             <artifactId>cxf-rt-frontend-simple</artifactId>
97             <version>2.6.1</version>
98         </dependency>
99
100         <dependency>
101             <groupId>org.apache.cxf</groupId>
102             <artifactId>cxf-rt-transports-http</artifactId>
103             <version>2.6.1</version>
104         </dependency>
105
106         <dependency>
107             <groupId>org.apache.thrift</groupId>
108             <artifactId>libthrift</artifactId>
109             <version>0.8.0</version>
110         </dependency>
111
112         <dependency>
113             <groupId>com.caucho</groupId>
114             <artifactId>hessian</artifactId>
115             <version>4.0.7</version>
116         </dependency>
117
118         <dependency>
119             <groupId>javax.servlet</groupId>
120             <artifactId>javax.servlet-api</artifactId>
121             <version>3.1.0</version>
122         </dependency>
123
124         <dependency>
125             <groupId>org.mortbay.jetty</groupId>
126             <artifactId>jetty</artifactId>
127             <version>6.1.26</version>
128             <exclusions>
129                 <exclusion>
130                     <groupId>org.mortbay.jetty</groupId>
131                     <artifactId>servlet-api</artifactId>
132                 </exclusion>
133             </exclusions>
134         </dependency>
135
136         <dependency>
137             <groupId>log4j</groupId>
138             <artifactId>log4j</artifactId>
139             <version>1.2.16</version>
140         </dependency>
141
142         <dependency>
143             <groupId>org.slf4j</groupId>
144             <artifactId>slf4j-api</artifactId>
145             <version>1.6.2</version>
146         </dependency>
147
148         <dependency>
149             <groupId>redis.clients</groupId>
150             <artifactId>jedis</artifactId>
151             <version>2.1.0</version>
152         </dependency>
153
154         <dependency>
155             <groupId>javax.validation</groupId>
156             <artifactId>validation-api</artifactId>
157             <version>1.0.0.GA</version>
158         </dependency>
159
160         <dependency>
161             <groupId>org.hibernate</groupId>
162             <artifactId>hibernate-validator</artifactId>
163             <version>4.2.0.Final</version>
164         </dependency>
165
166         <dependency>
167             <groupId>javax.cache</groupId>
168             <artifactId>cache-api</artifactId>
169             <version>0.4</version>
170         </dependency>
171
172         <dependency>
173             <groupId>org.jboss.resteasy</groupId>
174             <artifactId>resteasy-jaxrs</artifactId>
175             <version>3.0.7.Final</version>
176         </dependency>
177
178         <dependency>
179             <groupId>org.jboss.resteasy</groupId>
180             <artifactId>resteasy-client</artifactId>
181             <version>3.0.7.Final</version>
182         </dependency>
183
184         <dependency>
185             <groupId>org.jboss.resteasy</groupId>
186             <artifactId>resteasy-netty</artifactId>
187             <version>3.0.7.Final</version>
188         </dependency>
189
190         <dependency>
191             <groupId>org.jboss.resteasy</groupId>
192             <artifactId>resteasy-jdk-http</artifactId>
193             <version>3.0.7.Final</version>
194         </dependency>
195
196         <dependency>
197             <groupId>org.jboss.resteasy</groupId>
198             <artifactId>resteasy-jackson-provider</artifactId>
199             <version>3.0.7.Final</version>
200         </dependency>
201
202         <dependency>
203             <groupId>org.jboss.resteasy</groupId>
204             <artifactId>resteasy-jaxb-provider</artifactId>
205             <version>3.0.7.Final</version>
206         </dependency>
207
208         <dependency>
209             <groupId>org.apache.tomcat.embed</groupId>
210             <artifactId>tomcat-embed-core</artifactId>
211             <version>8.0.11</version>
212         </dependency>
213
214         <dependency>
215             <groupId>org.apache.tomcat.embed</groupId>
216             <artifactId>tomcat-embed-logging-juli</artifactId>
217             <version>8.0.11</version>
218         </dependency>
219
220         <dependency>
221             <groupId>com.esotericsoftware.kryo</groupId>
222             <artifactId>kryo</artifactId>
223             <version>2.24.0</version>
224         </dependency>
225
226         <dependency>
227             <groupId>de.javakaffee</groupId>
228             <artifactId>kryo-serializers</artifactId>
229             <version>0.26</version>
230         </dependency>
231
232         <dependency>
233             <groupId>de.ruedigermoeller</groupId>
234             <artifactId>fst</artifactId>
235             <version>1.55</version>
236         </dependency>
237     </dependencies>
238
239
240 </project>

其它注意事项:

dubbo构架中,zk充着“服务注册中心”的角色,所以生产者与消费者的xml配置文件中,都要配置zk地址,如果zk采用集群部署时,配置写法参考下面这样:

<dubbo:registryaddress="zookeeper://172.28.*.102:2181?backup=172.28.*.102:2182,172.28.*.102:2183"/>

dubbo还有一个管理界面,用于服务治理,包括启用/禁用服务,设置服务的路由规则(即:A地址的Consumer直接调用B机器的Provider,而不是由负载均衡算法分配)等等。

使用方法:将dubbo-admin这个项目编译成war包后,部署到jetty或其它兼容web server即可(当然要修改\WEB-INF\dubbo.properties里zk的地址)

部署完成后,访问管理界面时,默认用户名,密码均是root。

另外dubbo-monitor项目用于性能监控,结合监控产生的数据,再套上一些图表展示的框架,可以用图表方式直观展示各种指标。

注:官网给出的dubbo-admin采用的webx架构有点老,而且除了淘宝之外,几乎没人在用,dubbo-monitor-simple界面也比较古朴,所以社区也人对其做了扩展,详情参考另一篇博客dubbox 的各种管理和监管

2016-02-25:dubbox依赖的spring虽然升级成3.x了,但版本还是有点低,spring都已经4.x了,为了方便我fork了一份,升级成spring 4.x 同时增加了log4j2的日志组件支持,详情见:dubbox升级spring到4.x及添加log4j2支持

参考文章:

http://shiyanjun.cn/archives/341.html

http://blog.csdn.net/wilsonke/article/details/39896595

http://www.dataguru.cn/thread-464197-1-1.html

http://www.iteye.com/magazines/103

http://dangdangdotcom.github.io/dubbox/rest.html

http://dangdangdotcom.github.io/dubbox/demo.html

http://blog.csdn.net/hzzhoushaoyu/article/details/43273099

作者: 菩提树下的杨过

出处: http://yjmyzz.cnblogs.com

分布式服务框架Dubbo/Dubbox入门示例相关推荐

  1. 分布式服务框架 dubbo/dubbox 入门示例(转)

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  2. 分布式服务框架 dubbo/dubbox 入门示例

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  3. 分布式服务框架 dubbo/dubbox 入门示例(2)

    dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm ...

  4. 分布式服务框架 dubbo/dubbox 的搭建

    安装github on Windows的客户端,即安装Github,并将在path路径中,把git.exe加进去.比如安装Github的路径为D:\Program Files\Git,则在path路径 ...

  5. 11月15日云栖精选夜读:分布式服务框架Dubbo疯狂更新!阿里开源要搞大事情?

    最近,开源社区发生了一件大事--使用最广的开源服务框架之一Dubbo低调重启维护,并且3个月连续发布了3个维护版本.这3个维护版本不仅解决了社区关心的一系列问题和需求,还让整个社区的活跃度得到了大幅提 ...

  6. 分布式服务框架Dubbo使用小结

    介绍: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA 服务治理方案,每天为2,000+个服务提供3,000,000,0 ...

  7. 分布式服务框架——Dubbo

    1. Dubbo 概述 1.1 什么是分布式系统 <分布式系统原理与范型>定义: "分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统" 分布式系 ...

  8. 阿里分布式服务框架Dubbo的架构总结

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模 ...

  9. 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访

    专家访谈 目录(?)[-] 先来个自我介绍吧! Dubbo是什么?能做什么? Dubbo适用于哪些场景? Dubbo的设计思路是什么? Dubbo的需求和依赖情况? Dubbo的性能如何? 和淘宝HS ...

最新文章

  1. 为清理助手制作便利工具的技术实现
  2. 上海浦发银行总行信息科技部大数据专家陈春宝:大数据与机器学习重塑零售银行业务...
  3. 天翼云从业认证(4.11)天翼云物流行业解决方案
  4. imp oracle full,Oracle 10g imp 之 full database (转官档)
  5. 多线程的创建方式---继承Thread和实现Runnable
  6. usb 驱动修复_您可以修复物理损坏的USB驱动器吗?
  7. Linux下的C编程实战之文件系统编程
  8. linux父进程循环,LINUX C 父进程建立多个子进程循环非堵塞回收列子
  9. 基于java的信访项目_基于JAVA的某省人大信访信息系统的设计与实现
  10. EPON中ONU版本对冲的故障定位与分析解决
  11. 拦截器与过滤器的区别
  12. 浅谈Anchor free与Anchor based
  13. 关于盗墓笔记的那些事
  14. 显卡简介,显卡怎么查看
  15. D - Petya and Array(树状数组,二分)
  16. 修改Arduino IDE背景和字体颜色
  17. 【转】不要等到错过了之后才发现真正的爱
  18. 深入浅出PaddlePaddle函数——paddle.Tensor
  19. 基于深度强化学习的机器人运动控制研究进展 | 无模型强化学习 | 元学习
  20. matlab axisxy行列关系,在matlab中axis是什么意思

热门文章

  1. linux进下一级目录下,linux进入下一级目录的命令
  2. C++获取字符串长度
  3. kettle使用--1.mysql多表关联导入mongoDB
  4. JavaSE-part2
  5. Composing builds 依赖统一管理实践
  6. correl函数_教你利用Correl函数返回相关系数并确定属性关系
  7. hadoop命令无法创建目录
  8. android开发视频资源 电驴10G下载
  9. 网传叮咚买菜大裁员?并非空穴来风
  10. bvh动作 舞蹈_kinect动作捕捉初探(下)——bvh文件的处理和应用