经过上次的讲解,相信小伙伴们已经对中间件有了一定的了解了吧。我们知道,中间件也分很多种的,这次我们就来看看中间件中的消息中间件是什么及它们的实现原理吧。
什么是消息中间件?
我们都知道中间件是什么了,所以这里我就只讲消息了,消息是指软件和对象之间进行交互作用与通讯利用的一种方式。通俗的说,我们也可以说消息是一种在应用间传送的数据。消息类型可以随意。
我们可以以如下这张图来了解一下:
那什么是消息中间件呢?它是一种只关注于数据的发送和接受,并且利用高效可靠的异步消息传递机制进行平台无关的数据交流,并基于数据通信集成的分布式系统!萌新们可能会觉得有点绕,其实通俗的说,消息中间件就是将软件和软件之间的交互方式进行存储和管理的一种技术,类似于容器。
如图:
消息中间件实现原理是什么?
组成构件
-Broker:消息代理,表示一个消息队列服务器实体,运行多个 RabbitMQ 服务器能够组成一个集群,形成一个逻辑 Broker。
-Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象。所有的 vhost 本质可以说是一个 mini 版的 RabbitMQ 服务器,它拥有自己的交换器、绑定、队列和权限机制。 AMQP 概念的基础就是vhost ,它必须在连接时指定,RabbitMQ 默认的 vhost 是 /。
-Exchange:交换器,表示一个接收生产者发送的消息并将这些消息路由发送到服务器中的队列。
-Queue:消息队列,适用于保存消息,一直到发送给消费者。它是消息的容器,也可以说是消息的终点。一个消息可以投入到一个或多个队列中。消息一直在队列里面,只有当消费者连接到这个队列将其取走才会消失。
-Binding:绑定,常用于消息队列与交换器之间的关联。可以说,一个绑定就是一个基于路由键把交换器和消息队列连接起来的路由规则,所以我们也可以说它是一个由绑定构成的路由表。
-Message:消息,它一定是不具名的,一定是由消息头和消息体组成的。消息体是不透明的,而消息头则由一系列的可选属性组成,属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。
-Publisher:消息生产者,表示一个向交换器发布消息的客户端应用程序。
-Consumer:消息消费者,表示一个从消息队列中取得消息的客户端应用程序。
实现流程
1)、消费者实现TCP长连接
2)、消息体用阻塞队列实现
3)、消息写入磁盘文件(可用HaspMap类似数据结构)
4)、消息发送后异步回调删除已发送消息磁盘文件信息
有哪些常见消息中间件?
ActiveMQ
ActiveMQ由Apache开发,是目前最流行,最强大的开源消息总线。它是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。
RabbitMQ
RabbitMQ是一个开源的AMQP实现,是在服务器端用Erlang语言编写的。常作用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现出色。
具体的可以通过下文来进行了解-rabbitmq详解,什么是rabbitmq?支持哪些编程语言?
Kafka
Kafka是有着高吞吐量的特定分布式发布订阅消息系统,它是一个分布式的、分区的、十分可靠的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。
具体的可以通过下文来进行了解-
以上就是关于分布式消息中间件的全部内容了,如果小伙伴们还有疑问,需要了解更多java架构师相关知识的话,就请持续关注我们网站了解详情吧。
推荐阅读: