1
1
微服务间进程通讯
2
2
============
3
3
- [ 微服务间进程通讯] ( #微服务间进程通讯 )
4
- - [ 1. 有哪些通讯方式?] ( #1-有哪些通讯方式 )
5
- - [ 2. 通讯风格] ( #2-通讯风格 )
6
- - [ 3. 消息的格式] ( #3-消息的格式 )
7
- - [ 4. 基于消息队列的通讯模式] ( #4-基于消息队列的通讯模式 )
8
- - [ 4.1 如何基于消息队里实现请求回复模式] ( #41-如何基于消息队里实现请求回复模式 )
9
- - [ 4.2 如何处理重复消息?] ( #42-如何处理重复消息 )
10
- - [ 4.3 一个生产者,多个消费者,如何确保一个订单的消息派发给同一个的消费者, 且保证消息的顺序?] ( #43-一个生产者多个消费者如何确保一个订单的消息派发给同一个的消费者-且保证消息的顺序 )
11
- - [ 4.4 事务中的消息] ( #44-事务中的消息 )
12
-
13
- ## 1. 有哪些通讯方式?
14
-
15
- RPC, GRPC, Message Queue, HTTP(RESTfull, GraphQL)
16
-
17
-
18
- ## 2. 通讯风格
4
+ - [ 1.1 通讯风格] ( #11-通讯风格 )
5
+ - [ 1.2 消息的版本] ( #12-消息的版本 )
6
+ - [ 1.3 消息的格式] ( #13-消息的格式 )
7
+ - [ 1.4 有哪些通讯方式?] ( #14-有哪些通讯方式 )
8
+ - [ 2.1 基于消息队列的通讯模式] ( #21-基于消息队列的通讯模式 )
9
+ - [ 2.1.1 消息队列介绍] ( #211-消息队列介绍 )
10
+ - [ 2.2 如何基于消息队里实现请求回复模式] ( #22-如何基于消息队里实现请求回复模式 )
11
+ - [ 2.3 如何处理重复消息?] ( #23-如何处理重复消息 )
12
+ - [ 2.4 一个生产者,多个消费者,如何确保一个订单的消息派发给同一个的消费者, 且保证消息的顺序?] ( #24-一个生产者多个消费者如何确保一个订单的消息派发给同一个的消费者-且保证消息的顺序 )
13
+ - [ 2.5 事务中的消息] ( #25-事务中的消息 )
14
+
15
+ ## 1.1 通讯风格
19
16
20
17
第一个维度
21
18
@@ -29,21 +26,24 @@ RPC, GRPC, Message Queue, HTTP(RESTfull, GraphQL)
29
26
* 同步调用
30
27
* 异步调用
31
28
32
- ## 3. 消息的格式
29
+ ## 1.2 消息的版本
30
+
31
+ ## 1.3 消息的格式
33
32
34
33
* 纯文本
35
34
* 二进制(Protobuff, Apache Thrift)
36
35
37
36
[ Beating JSON performance with Protobuf] ( https://auth0.com/blog/beating-json-performance-with-protobuf/ )
38
37
39
- ## 4. 基于消息队列的通讯模式
38
+ ## 1.4 有哪些通讯方式?
40
39
41
- ![ 基于消息队列的通讯模式 ] ( ./assets/1627461333618.jpg )
40
+ RPC, GRPC, Message Queue, HTTP(RESTfull, GraphQL )
42
41
42
+ ## 2.1 基于消息队列的通讯模式
43
43
44
- 1 . 点对点
45
- 2 . 订阅(publish-subscribe)
44
+ ### 2.1.1 消息队列介绍
46
45
46
+ ![ AMQP 0-9-1 Model in Brief] ( ./assets/2022-01-05-14-06-21.png )
47
47
48
48
connection
49
49
@@ -53,22 +53,30 @@ channel
53
53
54
54
queue
55
55
56
-
57
56
[ 消息队列的概念] ( https://www.rabbitmq.com/tutorials/amqp-concepts.html )
58
57
59
- ### 4.1 如何基于消息队里实现请求回复模式
58
+
59
+ ![ 基于消息队列的通讯模式] ( ./assets/1627461333618.jpg )
60
+
61
+ * 点对点(point to point)
62
+ * 订阅(publish-subscribe)
63
+
64
+
65
+ ### 2.2 如何基于消息队里实现请求回复模式
60
66
61
67
![ 如何基于消息队里实现请求回复模式] ( ./assets/1627461542655.jpg )
62
68
63
- ### 4.2 如何处理重复消息?
69
+ ### 2.3 如何处理重复消息?
70
+
71
+ ### 2.4 一个生产者,多个消费者,如何确保一个订单的消息派发给同一个的消费者, 且保证消息的顺序?
64
72
65
- ### 4.3 一个生产者,多个消费者,如何确保一个订单的消息派发给同一个的消费者, 且保证消息的顺序?
73
+ ![ message order ] ( ./assets/2022-01-05-13-57-53.png )
66
74
67
75
[ RabbitMQ Shading] ( https://github.com/rabbitmq/rabbitmq-sharding )
68
76
[ rabbitmq-message-order-of-delivery] ( https://stackoverflow.com/questions/21363302/rabbitmq-message-order-of-delivery )
69
77
70
- ### 4.4 事务中的消息
78
+ ### 2.5 事务中的消息
71
79
72
80
比如在OrderService创建订单的过程中,需要发布一个“新订单”事件, KitchenService服务订阅了它。OrderService需要确保,“新订单”,这个时间在一个数据库事务中产生。
73
81
74
- [ 事务中的消息] ( ./1627516258927.jpg )
82
+ ! [ 事务中的消息] ( ./assets /1627516258927.jpg )
0 commit comments