既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 管道(Pipe):一种半双工的通信方式。父进程创建管道,得到两个文件描述符指向管道两端,父进程fork出子进程,子进程也有两个文件描述符指向管道两端,然后父子进程可以通过管道进行单向通信。
- 命名管道(Named Pipes):命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。
- 消息队列(Message Queue):消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息队列就是一个消息的链表。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。
- 共享内存(Share Memory):共享内存是存在于内核级别的一种资源。使得多个进程可以访问同一块内存空间。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
- 信号量(Semaphore):是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。
- 套接字(Socket):网络中不同主机上的应用进程之间进行双向通信的端点的抽象。套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
- 信号(Signal):通过接收信号来执行特定动作。
消息中间件就是使用的消息队列的通信方式,把A和B两个应用进程间需要通信的消息存放在消息队列中。
几种常见消息中间件
它们之间的区别引用网上的对比图,如下,
数据丢失问题
MQ中间件的通用消息投递过程有哪些情况可能会造成丢数据?
消息异步投递过程如下图,生产者Producer生产消息后向消息中间件Broker发送消息,Broker收到消息后将消息进行持久化(写入磁盘),然后再发送ACK确认帧给Producer。Producer接收到ACK后知道消息传输到了Broker了,不会再进行超时重传操作。Broker可以主动将消息队列中的数据推送给Consumer,也可以是Consumer定时去轮训Broker的消息队列中是否有新消息从而抽取消息。Consumer收到消息后给Broker发送ACK确认,Broker就可以把已经投递完成的消息进行删除了。
- 发送阶段,遇到高延迟,Producer会多次重发消息,直到Broker ACK确认。过程Broker会自动去重,超时Producer产生异常,应用进行捕获提示。
- 存储阶段,Broker先刷盘再ACK确认,即便ACK失败消息也不会丢失,多次重试直到Producer接收,可能会导致消息积压。
- 消费阶段,Broker向Consumer发数据,一段时间未接收,自动重发,直到Consumer ACK确认,Consumer需要注意幂等处理。
可能出现的问题和处理方式:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
会持续更新**