前言相信不少朋友听说过消息中间件,并且还使用过,比方说我们之前学习的Redis的list数据结构就可以当作一个消息中间件,其实这个东西也没那么玄乎,说白了就是一个FIFO(First In First Out)队列,类似于一个管道,将消息从入口放进去,然后从出口取出,通过这种方式将杂乱无序的消息堆排列成有序的消息队列,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,使得它可以在分布式环境下扩展进程间的通信。 所以说,消息中间件在分布式系统中就相当于一个 “通道”,或者说是一个 “漏斗”,我们本节开始学习的ActiveMQ就是这个 “大漏斗” 。那么问题来了,“漏斗” 的本质是什么?到底有什么用途?是怎么个工作原理? 什么是ActiveMQ刚刚我们简单的提到了一下什么是消息中间件,那作为消息中间件的一员,我们还是先来介绍下ActiveMQ吧!
总结起来,ActiveMQ就是一个实现了JMS(Java Message Service)的消息中间件。得益于JMS的跨平台特性,该中间件也可跨平台(
关于生产者和消费者,我们之前在 Marco’s Java【Dubbo 之手写Dubbo框架实现远程调用】 中有专门的提到并分析过,至于消息么,这个很容易理解,就是被传递的数据,我们重点来说说消息模式,JMS的消息模式分为Queue队列模式和Topic主题模式,队列模式其实就是点对点的模式,我发一个消息你接收一个消息,而主题模式也可以被当成订阅模式,就好比你订阅了曾小贤的 “你的月亮我的心” 广播电台,那么当曾小贤开始工作并装逼时,所有的订阅者就可以收听到他的广播了。关于点对点和点对面,下面的ActiveMQ名词解释中我们还会提到。 ActiveMQ名词解释ActiveMQ的部分名词跟上面JMS的名词有些相似,比如说Broker就是上面提到的服务提供者,至于ActiveMQ消息生产者和消息的消费者就完全跟上面的概念一样了,我这里就不再列出来了。
接下来,咱们继续介绍刚刚提到的ActiveMQ中两个比较重要的概念:点对点(Queue模式)、点对面(Topic模式) 点对点点对点的意思就是,当生产者投递一个消息之后,该消息只能让其中一个消费者获取到,这就好比我们在微信上面聊天,你发信息给你女朋友,这种点对点的方式交流,就是ActiveMQ的 “点对点” 模式。那么结合ActiveMQ的消息模式中的队列模式,可以用下面的图来表示,JMS客户端包括生产者Productor和消费者Consumer,Productor生产的一个message只能被一个Consumer使用,并且在这个模式中Consumer可以在任意时间取消息 点对面而点对面的意思就是,当生产者投递一个消息之后,该消息可以让所有的订阅者收到。还是以微信聊天为例,当你发起了群聊,其他的人都可以接受到你发送的信息,因为在群聊被创建之后,这个群里的任意一个成员都是一个生产者,并会被其他成员订阅,这中模式下(Topic模式),JMS客户端包括Publisher发布者和Subscriber订阅者,主题中的消息可以被所有订阅者消费,但是需要注意的是订阅者不能消费订阅之前发送的消息! ActiveMQ的原理和作用其实,弄清楚了上面的点对点和点对面的两张图,ActiveMQ的原理也就差不多可以懂了,生产者可能在不同的主机上,并且作为消息的生产方,并发产生的消息数量可能是成千上万的,就好比雨滴洒下来,没有任何规律,有快有慢,而ActiveMQ则作为一个引流的管道,将消息都收集起来,消费者取消息就完事儿了,在高并发的情况下,根本不用再去考虑我哪个消费者该消费哪个消息。 消息队列实现异步这可以给我们带来怎样的启发呢?比如说我这里有两个项目,一个productor项目和一个consumer项目 流量削峰比如说某宝网站用户在双十一的不同的时间段下单量不均匀,00:00时有10w的下单量,00:20有8w的下单量,01:00时有5w的下单量… 那么这种情况怎么因对呢?如何去中和这几个时间点的处理数据的速率是个关键点,此时我们使用ActiveMQ就可以完成这个操作,通过将大量的数据置入消息队列中,然后由后台的消费者去消费队列中的消息(真正的下单操作在这里执行),这就是所谓的流量削峰。 软总线软总线这个概念最近也比较火,主要是华为的 “鸿蒙” 系统腾空出世,说的很玄乎,其实软总线本质上也是一个消息中间件,通过远程调用实现进程间的通信,最终实现进程的内存共享,它可以用于多个微内核之间的通信。 物联网说到物联网,可能还有的朋友会比较陌生,但是说到这几年流行的共享单车,大家肯定不会陌生了,物联网的思想其实就是通过网络让万物互联,而让万物互联的条件就是网络一定要好!因为万物互联时代,如果网络通信不好,那就无法顺利的获取 “物” 所发送的信号,现在5G的横空出世,其实很大程度上解决了这个问题,因此,物联网以及人工智能在未来的10年肯定是个发展趋势,这是毋庸置疑的! ActiveMQ的安装好啦,ActiveMQ就先介绍到这里,接下来我们来安装ActiveMQ以及运行它,安装步骤也非常的简单
第二步:下载压缩包
第三步:解压文件
解压之后,查看ActiveMQ的目录结构,同样的,bin就是存放二进制可执行文件的目录,conf则存放配置文件,data是存放数据的文件夹(ActiveMQ默认存储数据的方式是kahadb,后面会讲到),docs存放的是一些文档,lib存放的是依赖jar包,webapps中存放web应用,可见ActiveMQ肯定是有一个可视化页面的,ActiveMQ中的web项目是运行在Jetty里面的,Jetty和Tomcat 一样也是web 容器(Solr 也用的是Jetty)。论服务器性能,还是Tomcat略胜一筹,至于为什么ActiveMQ要用Jetty,据说是ActiveMQ横空出世的那一年,Google当时也在使用Jetty,所以就用上了…
启动完成之后,访问 ActiveMQ的可视化页面
接下来点开Queues的管理中心 |
|
来自: 芥子c1yw3tb42g > 《谋生之道-自律自由》