高并发中间件2-消息中间件的设计

Posted Java架构师进阶手册

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发中间件2-消息中间件的设计相关的知识,希望对你有一定的参考价值。


高并发中间件2-消息中间件的设计



高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


消息的持久化


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计

重发策略

高并发中间件2-消息中间件的设计

高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件2-消息中间件的设计


高并发中间件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


有了进程之间的通信,那么还有线程之间的通信


  1. volatile

  2. 等待/通知机制

  3. join方式

  4. threadLocal

  5. 使用JUC工具类

  6. ReentrantLock 

  7. 基本LockSupport实现线程间的阻塞和唤醒



以上是关于高并发中间件2-消息中间件的设计的主要内容,如果未能解决你的问题,请参考以下文章

面试官:消息中间件如何实现每秒几十万的高并发写入?石杉的架构笔记

高并发中间件4-ActiveMQ支持的协议

高并发中间件3-ActiveMQ

使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯

使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯

使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯