(以下全部是个人理解,如有错误烦请指正)
一个完整的业务:【顾客】去【饭店】【吃饭】
一:消费者-生产者-信息确立:
消费者:【顾客】 【厨师】
生产者:【厨师】 【洗碗工】
信息: 【食物】 【盘子】
二:分布式服务确立:
(微服务是一种设计,分布式服务是实现)
分布式服务(特点是各司其职):【厨师】、【洗碗工】、【服务员】等
集群:以上岗位都可以有多人同时工作 ,有多个人工作的叫做集群,只有一个人工作的叫做单点
三:通过实际情况进行个人理解:
1.现实:[洗碗工]将盘子清理干净,放入厨房中盘子的地方等待被使用
理解①:可以理解为放入缓存中(如redis),库存+1(如果设计到更新数据库的话,此处就涉及到缓存的三种方式的知识点),等待调用。
理解②:可以理解为放入消息队列中,等待被消费。
2.现实:[顾客]通过第三方平台进行二维码点单,并支付金额
理解①:金额代缴给第三方,第三方在一定时间后,将金额给到饭店。相当于是一个延迟队列。(如果顾客不吃了,要退钱,这个金额就不能给到饭店了,所以给钱的时候可能还需要一次校验,或者从队列中移除)
理解②:[顾客](消费者)点菜,相当于是订阅了消息,等待厨师(生产者)提供
理解③:第三方(生产者)提供了一份订单(信息)给到厨房,厨房给到厨师(消费者)
3.现实:厨房收到新的订单,分派给厨师,厨师开始做饭
理解①:在第三方(生产者)和厨房,厨师之间的关系中,厨房相当于一个broker
理解②:厨房管理厨师,且处理订单,将订单中比如五道菜找对应能够处理的厨师进行料理,这块也就是相当于消息如何生成的一种调度,应该属于需要自己实现的部分。厨房相当于是生产者管理中心。
4.现实:厨师做好饭菜,取出盘子,将饭菜装入盘子,放到取菜口。
理解①:从盘子的消息队列中消费一个盘子(或者相当于取出缓存中的数据并更新缓存)
理解②:饭菜(消息)生成完毕,厨师(生产者)将消息放入到取菜口(交换器)中,等待服务员(管理管道的管道管理中心?)确认饭菜(一道菜应该有一个routing key,不管几盘该道菜,routing key都应该一样)的订单号(每一个顾客的订单都有一个id)后给顾客(消费者)
理解③:要保证数据一致性,做完菜后确保不会重复做菜(重复生成消息)
5.现实:服务员确认饭菜是哪位顾客的,然后将饭菜给到顾客,并确认饭菜给过顾客了
理解①:确认key,通过管道传递给消费者,然后取消消费者对于该饭菜的订阅
理解②:若有多个消费者订阅同一道菜(同一信息),需要根据订单的顺序消费(即消费顺序的确定)
6.现实:顾客吃完以后,离开饭店。
理解①:如果是网页,可以理解为离开网页。如果是客户端,可以理解为关闭客户端。取消连接。