170328、Maven+SpringMVC+Dubbo 简单的入门demo配置
之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息。最近有时间了,打算做一个demo把dubbo在本地跑起来先。
先copy一段dubbo的介绍哈!DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点(其他的详细介绍可以查看dubbo的官网地址dubbo,写的很详细哒!)。
该demo是基于maven搭建的,项目架构基于SpringMVC,这里忽略Spring的基本配置,着重介绍下dubbo部分的配置,以及dubbo后台管理系统
一、软件环境
1、zookeeper
下载地址:https://zookeeper.apache.org/releases.html 下载最新版的zookeeper,我这里使用的版本是 zookeeper-3.4.8(当前最新版3.5.1)
2、springMVC (maven方式引入)
3、dubbo (maven方式引入)
二、项目搭建
这里我搭建了三个项目,分别为dubbo-api,dubbo-controller,dubbo-service
dubbo-api:主要是接口定义,供controller调用,以及service层去实现该接口,分离这一层的好处就是前段项目调用接口时候,直接调用dubbo-api的接口即可,不需要关注后端如何实现;而service层来具体实现该接口,进行业务逻辑处理,不需要关注 controller层如何调用。
dubbo-controller:主要controller层控制跳转等。
dubbo-service:主要是service实现,结合数据层实现后端业务逻辑处理。
项目搭建完成之后,的结构图如下:
三、项目配置
1、dubbo-api
新建TestService接口类
1
2
3
4
5
6
7
8
9
10
11
12
|
<code class = "hljs java" > package com.dubbo.service; public interface TestService { /** * 测试发消息 * @param name * @return */ public String sayHello(String name); }</code> |
pom.xml配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<code class = " hljs 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/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <groupid>com.dubbo</groupid> <artifactid>dubbo-api</artifactid> <version> 0.0 . 1 -SNAPSHOT</version> <packaging>jar</packaging> <name>dubbo-api</name> <url>http: //maven.apache.org</url> <properties> <project.build.sourceencoding>UTF- 8 </project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version> 3.8 . 1 </version> <scope>test</scope> </dependency> </dependencies> </project></code> |
注意: 这个项目最终打包成jar文件,直接maven引入到另外两个项目中
2、dubbo-controller
新建MyController类
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
|
<code class = "hljs avrasm" > package com.dubbo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.dubbo.service.TestService; /** * controller * @author hwy * */ @Controller public class MyController { @Autowired private TestService testService; @RequestMapping (value = "/test" ) @ResponseBody public String testSay( @RequestParam (value = "name" ,defaultValue = "" ) String name){ StringBuffer sb = new StringBuffer(); sb.append( "Dubbo: " ).append(testService.sayHello(name)); return sb.toString(); } }</code> |
新建dubbo-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<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: //code.alibabatech.com/schema/dubbo http: //code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name= "test_consumer" > <dubbo:reference interface = "com.dubbo.service.TestService" id= "testService" check= "false" > </dubbo:reference></dubbo:registry></dubbo:application></beans></code> |
注意:这里作为消费者名称为test_consumer,注释很详细,就不一一介绍了,这个项目最终打包成dubbo-service.war放在tomcat或其他容器中运行。
pom.xml配置
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
<code class = " hljs 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/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <groupid>com.dubbo</groupid> <artifactid>dubbo-controller</artifactid> <version> 0.0 . 1 -SNAPSHOT</version> <packaging>war</packaging> <name>dubbo-contoller</name> <url>http: //maven.apache.org</url> <properties> <project.build.sourceencoding>UTF- 8 </project.build.sourceencoding> <org.springframework.version> 3.1 . 4 .RELEASE</org.springframework.version> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version> 3.8 . 1 </version> <scope>test</scope> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>javax.servlet-api</artifactid> <version> 3.1 . 0 </version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${org.springframework.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context-support</artifactid> <version>${org.springframework.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${org.springframework.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${org.springframework.version}</version> </dependency> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-core-asl</artifactid> <version> 1.9 . 12 </version> </dependency> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-mapper-asl</artifactid> <version> 1.9 . 12 </version> </dependency> <dependency> <groupid>net.sf.json-lib</groupid> <artifactid>json-lib</artifactid> <version> 2.4 </version> <classifier>jdk15</classifier> </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.3 . 6 </version> <exclusions> <exclusion> <groupid>log4j</groupid> <artifactid>log4j</artifactid> </exclusion> </exclusions> </dependency> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version> 1.2 . 16 </version> </dependency> <dependency> <groupid>com.github.sgroschupf</groupid> <artifactid>zkclient</artifactid> <version> 0.1 </version> </dependency> <dependency> <groupid>com.dubbo</groupid> <artifactid>dubbo-api</artifactid> <version> 0.0 . 1 -SNAPSHOT</version> </dependency> </dependencies> <build> <finalname>dubbo-controller</finalname> </build> </project></code> |
3、dubbo-service
新建TestServiceImpl类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<code class = "hljs java" > package com.dubbo.service.impl; import com.dubbo.service.TestService; /** * service impl * @author hwy * */ public class TestServiceImpl implements TestService{ public String sayHello(String name) { return name + " service2 say hello word service2!" ; } }</code> |
新建applicationContext.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:p= "http://www.springframework.org/schema/p" xmlns:dubbo= "http://code.alibabatech.com/schema/dubbo" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans- 3.1 .xsd http: //code.alibabatech.com/schema/dubbo http: //code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name= "test_provider" > <dubbo:protocol name= "dubbo" port= "20880" > <dubbo:service interface = "com.dubbo.service.TestService" ref= "testService" > <bean id= "testService" class = "com.dubbo.service.impl.TestServiceImpl" > </bean></dubbo:service></dubbo:protocol></dubbo:registry></dubbo:application></beans></code> |
注意:这里作为服务提供者名称为test_provider,注释很详细,就不一一介绍了,这个项目最终打包成dubbo-service.war放在tomcat或其他容器中运行,跟其他直接通过ClassPathXmlApplicationContext 启动方式稍微有点区别。
pom.xml配置
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
<code class = " hljs 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.dubbo</groupid> <artifactid>dubbo-service</artifactid> <packaging>war</packaging> <version> 0.0 . 1 -SNAPSHOT</version> <name>dubbo-service Maven Webapp</name> <url>http: //maven.apache.org</url> <properties> <project.build.sourceencoding>UTF- 8 </project.build.sourceencoding> <spring.vesion> 3.1 . 4 .RELEASE</spring.vesion> </properties> <dependencies> <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> <exclusions> <exclusion> <artifactid>log4j</artifactid> <groupid>log4j</groupid> </exclusion> </exclusions> </dependency> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version> 1.2 . 17 </version> </dependency> <dependency> <groupid>com.github.sgroschupf</groupid> <artifactid>zkclient</artifactid> <version> 0.1 </version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aop</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-asm</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aspects</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-beans</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context-support</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-expression</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-instrument</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-instrument-tomcat</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.aspectj</groupid> <artifactid>aspectjweaver</artifactid> <version> 1.6 . 9 </version> </dependency> <dependency> <groupid>commons-pool</groupid> <artifactid>commons-pool</artifactid> <version> 1.5 . 3 </version> </dependency> <dependency> <groupid>commons-collections</groupid> <artifactid>commons-collections</artifactid> <version> 3.2 </version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jms</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-oxm</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc-portlet</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-struts</artifactid> <version>${spring.vesion}</version> </dependency> <dependency> <groupid>commons-httpclient</groupid> <artifactid>commons-httpclient</artifactid> <version> 3.1 </version> </dependency> <dependency> <groupid>com.dubbo</groupid> <artifactid>dubbo-api</artifactid> <version> 0.0 . 1 -SNAPSHOT</version> </dependency> </dependencies> <build> <finalname>dubbo-service</finalname> </build> </project> </code> |
好了,经过这么配置之后,我们的项目编码配置部分就大功告成了!
maven编译下三个项目,将dubbo-controller和dubbo-service放到tomcat容器中,启动tomcat容器! 出错啦! 为啥容器不起来!那是因为我们还少了主要的一步,那就是配置启动zookeeper,不然dubbo去zookeeper注册中心暴露服务地址不成功啦!
四、配置启动zookeeper
将下载的zookeeper压缩包,解压到一个磁盘目录上去,这里我指定的位置:D:\hwy\zookeeper-3.4.8,我们可以通过启动D:\hwy\zookeeper-3.4.8\bin\zkServer.cmd直接启动默认配置,默认端口为2181,当然我们也可以指定其他的配置,打开D:\hwy\zookeeper-3.4.8\conf\zoo.cfg,这个是zookeeper配置文件的位置,我们这里在指定一下数据目录以及数据日志目录
1
2
|
<code class = "hljs tex" >dataDir=D:\\hwy\\www\\zookeeper\\data dataLogDir=D:\\hwy\\www\\zookeeper\\log</code> |
启动zookeeper!
再次启动tomcat容器,是不是就成功啦!我们来访问下http://127.0.0.1:8090/dubbo-controller/test?name=hwy,看下返回结果是不是正确啦!
好啦!经过上边的一系列操作,一个Maven+SpringMVC+Dubbo 的demo就配置完成了,但是我们如果管理这些服务提供者以及消费者呢?当然,dubbo给我们提供了现成的后台管理网站,专门管理这些服务,应用,路由规则,动态配置,访问控制、权重控制、负载均衡等等,还可以查看系统日志,系统状态,系统环境等等,功能很是强大,通过这个后台,可以可视化控制你的服务和应用。
接下来我们来简单的看看后台系统,以及简单修改下权重控制啥的看看效果吧!我们将dubbo-admin-2.5.3.war包放到tomcat容器中,启动tomcat容器,访问http://127.0.0.1:8080/dubbo-admin-2.5.3
一、登录
注意:用户名和密码默认为root,当然为了安全起见,线上必须更改这个用户名和密码,
二、首页
注意:我们看到红色区域,里面显示 服务数:1 应用数:2 提供者数:1 消费者数:1 。
这就是刚刚我们启动的那个服务1(com.dubbo.service.TestService服务),应用2(test_consumer,test_provider),提供者1(192.168.2.193:20880) 消费者1(192.168.2.193),分别来张截图看看:
1、服务
2、应用
3、提供者
4、消费者
看看,是不是很直观的看到刚刚我们启动的服务,应用,提供者及消费者信息,这里,我们在演示下里面的功能之一权重调节功能,给不同的服务提供者分配不同的权限,看下消费者消费提供者的次数的变化。
为了达到演示效果,我将dubbo-service项目在复制一份放到tomcat里面去,并将TestServiceImpl类修改下sayHello()方法,并修改dubbo暴露端口号,通过输出不同信息,判断消费者调用哪个服务提供者提供的服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<code class = "hljs java" > package com.dubbo.service.impl; import com.dubbo.service.TestService; /** * service impl * @author hwy * */ public class TestServiceImpl implements TestService{ public String sayHello(String name) { return name + " say hello word!" ; } }</code> |
接着,我们在修改下dubbo的暴漏端口号,修改applicationContext.xml里面的
1
|
<code class = "hljs xml" ><dubbo:protocol name= "dubbo" port= "20881" ></dubbo:protocol></code> |
好了,我们在重新启动tomcat,继续访问http://127.0.0.1:8080/dubbo-admin-2.5.3,我们能看到提供者里面,已经有我们刚新加的192.168.2.193:20881服务提供者啦!
这个时候我们在访问http://127.0.0.1:8090/dubbo-controller/test?name=hwy,当我们刷新时,返回的结果中除了上面截图返回的结果,也会返回刚新修改的返回结果,而且多刷新几次,两种结果出现的几率是一样哒!因为这里的提供者权重是一样的。
现在,我们修改这2个提供者的权重,我们让192.168.2.193:20881的权重降一半即50,另一个192.168.2.193:20880提高到200,我们在来刷新多次,看下返回的两种结果出现的几率是不是1:4。亲测,是哒!!!
好了,上边只是简单介绍了这个后台管理系统,里面还有很多很强大的功能,我也暂时还没完全玩转,大家一起尝试下,分享下吧!
dubbo是一个很强大的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,我用到的只是冰山一角,他的更多功能,大家一起研究下吧!
170328、Maven+SpringMVC+Dubbo 简单的入门demo配置的更多相关文章
- Maven+SpringMVC+Dubbo 简单的入门demo配置
转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...
- maven+springmvc+dubbo+zookeeper
为什么要用dubbo? 还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm http://dubbo.io/ 一般 nginx+tomcat ...
- 关于Maven+Springmvc+Dubbo+Zookeeper整合
为什么要用dubbo? 还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm http://dubbo.io/ 一般 nginx+tomcat | - ...
- Dubbo与Zookeeper、Spring整合使用 maven+springmvc+dubbo+zookeeper
为什么要用dubbo? 还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm http://dubbo.io/ 一般 nginx+tomcat | - ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- IntelliJ IDEA maven springmvc+shiro简单项目
搭建springmvc简单步骤如:http://www.cnblogs.com/grasp/p/9045242.html,这点就不在描述了. 新建和设置完工程的目录后,结构如下: pom.xml文件内 ...
- .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)
前言: 自从.net core问世之后,就一直想了解.但是由于比较懒惰只是断断续续了解一点.近段时间工作不是太忙碌,所以偷闲写下自己学习过程.慢慢了解.net core 等这些基础方面学会之后再用.n ...
- IDEA下将dubbo简单项目跑Demo(2019.12版)
项目架构(聚合项目,父子模块) src没用,所以删去 选择maven项目,不用勾选模板骨架,直接main方法,因为不用到服务器 顺序是按照:添加pom依赖-接口实现类-配置文件 项目环境 IDE:In ...
- 【SSH系列】初识spring+入门demo
学习过了hibernate,也就是冬天,经过一个冬天的冬眠,当春风吹绿大地,万物复苏,我们迎来了spring,在前面的一系列博文中,小编介绍hibernate的相关知识,接下来的博文中,小编将继续介绍 ...
随机推荐
- ios端 返回上一级后 卡在正在加载中处理方式
//返回上一页 $('#goback').click(function () { history.back(); }); //判断是否为ios系统,若为ios则监听并重载 var u = naviga ...
- Decoration2:引入Angularjs显示前台一条数据
SpringMVC内置的RestFul API格式采用的是最复杂最全面的HATEOAS规范,对于简单应用来说,前台解析起来不方便,我们下面主要想办法重新定义一种简单的RestFulAPI. (1)先是 ...
- 【LeetCode】Permutations II 解题报告
[题目] Given a collection of numbers that might contain duplicates, return all possible unique permuta ...
- mysql 主主复制(双主复制)binlog-do-db
[root@DB ~]# grep "binlog-do-db" /etc/my.cnf binlog-do-db = test [root@DB-S ~]# grep " ...
- 错误:undefined reference to `__gxx_personality_v0'
使用gcc编译C代码,引用了C++ 库,出现这个错误,网上搜到这哥们的文章,解决问题 转自:错误:undefined reference to `__gxx_personality_v0' 1. Li ...
- Git出现error: Your local changes to the following files would be overwritten by merge: ... Please, commit your changes or stash them before you can merge.的问题解决(Git代码冲突)
在使用git pull拉取服务器最新版本时,如果出现error: Your local changes to the following files would be overwritten by m ...
- 延时NSTimer
import Foundationimport UIKit class YijfkController:UIViewController{ override func viewDidLoad() { ...
- C语言 · 大数加法
算法提高 大数加法 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个正整数a,b,输出a+b的值. 输入格式 两行,第一行a,第二行b.a和b的长度均小于1000位. ...
- QT在CT上的安装及运行
http://www.cubie.cc/forum.php?mod=viewthread&tid=2662&highlight=qt
- RabbitMQ之远程过程调用(RPC)【译】
在第二个教程中,我们学习了如何使用工作队列在多个worker之间分配耗时的任务. 但是如果我们需要在远程计算机上运行功能并等待结果呢?嗯,这是另外一件事情,这种模式通常被称为远程过程调用(RPC). ...