高并发中间件2-消息中间件的设计
Posted Java架构师进阶手册
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发中间件2-消息中间件的设计相关的知识,希望对你有一定的参考价值。
消息的持久化
重发策略
关于消息中间件所用的协议,可以看如下介绍
https://www.eefocus.com/communication/393583
备注:
OpenWire协议:OpenWire协议在网上没有对应的介绍,似乎是activeMQ自己定义的一种协议,官方网站对其的介绍如下:
OpenWire is our cross language Wire Protocol to allow native access to ActiveMQ from a number of different languages and platforms. The Java OpenWire transport is the default transport in ActiveMQ 4.x or later. For other languages see the following...
讲到了通信协议,我还想讲一下跨进程之间的通信
linux常用的进程间的通讯方式
(1)、管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
(2)、命名管道(named pipe):命名管道克服了管道没有名字的限制,同时除了具有管道的功能外(也是半双工),它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。
(3)、信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事件发生了,除了进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。
(4)、消息队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺
(5)、共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
(7)、信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
(8)、套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
详细介绍,可参照文章:
https://blog.csdn.net/zhaohong_bo/article/details/89552188
有了进程之间的通信,那么还有线程之间的通信
volatile
等待/通知机制
join方式
threadLocal
使用JUC工具类
ReentrantLock
基本LockSupport实现线程间的阻塞和唤醒
以上是关于高并发中间件2-消息中间件的设计的主要内容,如果未能解决你的问题,请参考以下文章
面试官:消息中间件如何实现每秒几十万的高并发写入?石杉的架构笔记
使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯