消息中间件的定位分析

消息中间件的定位分析

在以下的分析中,把产生消息的应用统一定义为消息的生产者,接收消息的应用统一定义为消息的消费者,尽管在mq中不使用这样的定义,而是称之为消息的发送 者和接收者。从不同的消息中间件对消息的产生者和使用者的名称定义来看,实际上已经反映出各消息中间件之间定位的差异,通过下面的分析,这种差异会更加清 晰。为了概念的统一,本文统一采用消息的生产者和消费者。

1、MQSeries

Mq设计的核心思想是存储转发,围绕消息如何发送到目的地完成产品的各类功能。在mq中,发送消息之前,需要把消息流转的路径配置出来,消息的生产者必须 知道消息在什么地方被消费,需要把消息发送到正确的目的地,并把消息放入正确的队列。消息的消费者从固定的本地队列中接收消息,只要是进入这个本地队列的 消息,消费者认为都是属于自己的消息。典型的使用模式如下:

从这个过程来看,mq实际上是消息的生产者驱动的,生产者决定把消息发送给哪个消费者,需要把消息放入正确的队列,无论这个队列有没有消费者。

从实际业务系统的角度来看,mq的使用是由业务规则驱动的,业务规则通过对消息的流转路径的配置体现出来(在这里的业务规则不包括对消息的实际处理规则)。

2、TongLINK/Q

TongLINK/Q的设计理念、定位和MQ类似,典型应用模式如下:

MQ和TongLINK/Q作为国内应用最广泛的消息中间件,主要解决企业内、外跨网络的可靠数据传输。基本的应用模式为点对点数据传输。

这类消息中间件主要解决了消息生产者和消费者之间的异步、可靠传输。

3、ActiveMQ

Active
MQ作为JMS的一个实现,基本的理念是提供一个消息在生产者和消费者之间交换的媒介,从Active
MQ的名称(broker)也能够看出,它的定位是为客户端应用提供消息交换的代理。这一点和MQSeries的定位完全不同,MQSeries更多的应用场景是解决点对点的消息传输。消息的“传输”和“交换”是两种完全不同的应用场景。

ActiveMQ的典型应用场景为:

生产者产生消息,并放入它所连接的代理服务器的队列中,本地消费者可以直接从这个队列中接收消息,在这种模式下,实现的是消息的本地消费,即消息的生产者和消费者连接到同一个代理服务器。

ActiveMQ还支持另外一种消息的消费模式——异地消费,通过在代理服务器之间配置传输通道,多个代理服务器可以组成一个服务器网络,消费者可以连接
到服务器中的任一代理服务器,异地消费其它代理服务器的消息。异地消费消息只需要满足几个简单的条件,包括生产者和消费者打开的队列名相同,消息流转次数
(流转中能够经过的代理服务器个数)在传输通道配置的范围内即可,使用非常方便。

从ActiveMQ的典型使用场景可以看到,消息的生产者只负责消息的生产,并不关心消息是否正确提交到消费者所在的服务器。这一点和MQSeries明
显不同。从消费者的角度来看,消费者只需要连接到代理服务器,消费属于自己的消息,在这个过程中,消费者不关心本地是否有能够消费的消息,代理服务器会自
动查找到属于这个消费者的消息,并把这些消息转移到消费者连接的代理服务器,而这个过程对于消费者来看,是完全透明的,消费者不关心消息的存放地点是本地
还是异地。

从异地消费的内部消息流转过程可以看出,ActiveMQ的核心思想实际上是由消费者驱动的,如果没有消费者,消息会一直保存在生产者连接的代理服务器的队列中;只有有消费者时,代理服务器组成的网络才会把消息流转到消费者连接的代理服务器的队列中。

使用ActiveMQ,更适合大量小消息在不同的应用之间进行快速交换的应用场景。对于跨网络的大消息传输,由于ActiveMQ是消费者驱动,只有消费
者连接到代理服务器时,消息才从源服务器向目标服务器转移,消费者需要等待整个消息的完整传输过程,这一过程根据实际的网络的不同,可能会比较“漫长”,
不能实现生产者和消费者之间完全的异步传输,在这样的场景下,MQSeries会更适合。

4、Rabbit MQ

Rabbit
MQ主要实现的也是生产者和消费者之间的数据交换,但是更强调消费者接收消息的规则。看一下Rabbit MQ的典型使用场景:

从产品的基本定位来看,Rabbit MQ和Active
MQ一样,都是消息在不同的客户端应用之间的交换,但是在具体的实现上,不同的产品有各自的出发点。

Rabbit
MQ的生产者并不把消息直接放入队列,而是首先经过一个exchange,通过在exchange配置规则,再确定把消息放入那个消费者的队列。

Rabbit
MQ的生产者只负责产生消息,生产者从不把消息直接放入队列,不关心消息是否能够放入队列,也就是不关心是否有符合条件的消费者,生产者只能把消息发送到exchange。如果没有任何消费者需要这个消息,消息不会进入任何队列。

从这个过程来看,Rabbit MQ实际上也是由消费者驱动。

消息中间件的定位分析,布布扣,bubuko.com

时间: 2024-11-10 00:19:18

消息中间件的定位分析的相关文章

一次服务器IO占用率高的定位分析

背景:请事假在外中,听平台组同事反馈了一个问题,在往生产数据库中导入部分数据时会造成客户端的访问超时,初步定位是因为服务器磁盘占用IO过高,导数据时IO会飙升到100%,因此引起了不少数据库的慢查询操作导致客户端响应超时,无奈只好暂时停止了导入数据的脚本,同时也延误了针对这部分数据的生产测试工作.于是我第二天回到公司就投入了对这个问题的跟踪定位工作. 环境描述: 操作系统 文件系统 数据库 首先我们数据库某最大表的数据也不过300w多条,对于MySQL来说还是能够正常处理的.而且客户端并发量也不

LCD 显示异常定位分析方法

第一种情况: 进入kernel或android 后,如果LCM图像示异常,可以通过如下步骤来判断问题出现在哪个层面. step1:通过DMMS截图,来判断上面刷到LCM的数据是否有问题. 若DMMS获取的图片没有问题,问题基本可以定位在LCM 驱动/模组,以及时序方面. step2: 若step1中DMMS获取的数据有问题,则需要抓取framebuffer数据进一步分析 adb shell cat /dev/graphics/fb0 > /data/fb.bin 然后将fb.bin通过adb p

百度云推送消息到达率低问题定位分析

去年做我们这个产品的时候,SE在客户端设计了一个推送功能,SE经过调研决定在Android和IOS端都集成百度的云推送SDK来支持这个推送功能.最近领导在做运营分析的时候,发现云推送的报表显示,在Android端消息的达到率非常低,设备的在线率波动比较大,有时高有时非常低. 我们的这个产品经过将近两年的折腾进步是有目共睹的,在今年的巴塞罗那GSMA世界移动通信大会上荣获"Best Mobile Music App"大奖,让我们这帮苦逼了将近两年的屌丝士气大振,领导也欣喜不已并且决定将精

通过日志定位分析接口调用缓慢的原因

最近我们的接口中有两个被调用的时候比较缓慢,一个查询大概需要2-3秒的样子,我们需要定位一下具体需要的时间秒数,就让某猿过去实现了.提交代码我review的时候我吓了一跳,那那两个类进行了手动统计时间,代码就不贴了,这样十分不好啊,如果以后要统计其他的controller或者service那就得手动再写,所以我重写了一份 我们需要对service以及controller进行统计,所以在springmvc.xml以及application-service.xml中都要开启aspectj 注解 <!

基于GIScript和GeoIP进行访问网址的地理定位分析

通过网页访问日志分析使用者的地址,然后将其放到地图上,分析访问来源的热区从而得到用户的地图分布,是不是很有用.也很酷?这里介绍个使用GIScript和GeoIP来进行访问网址的地理定位的例子. 这个功能虽然看起来简单,但其实要分为很多个环节的.下面详述: 1.首先是获取IP地址,这个不多说了.在Web服务器的RequestHeaders中都有,也可以通过日志进行提取.从文件中提取可以批量处理,而从访问信息中提取然后直接发送到消息总线或NoSQL之类的高效率存储系统可以实现实时的处理. 2.使用G

Linux 线程占用CPU过高定位分析

今天朋友问我一个Linux程序CPU占用涨停了,该如何分析, CPU占用过高,模拟CPU占用过高的情况 先上一段代码: 1 #include <iostream> 2 #include <thread> 3 #include <vector> 4 5 6 int main(int argc, char **argv) { 7 8 std::vector<std::thread> test_threads; 9 for(int i = 0; i < 9;

cpu监控波动定位分析问题

阿里云ECS->cpu监控信息 [[email protected] ~]# top 分析说明: cpu监视信息波动规律可以看出crontab任务或HTTP请求高峰期 对httpd mysqld服务占用cpu.内存使用率变化,本项目主要是api部分访问量大 cpu使用率高,定位原因: cpu使用率被拉高了,是数据量太大了,还是说响应时间太长了,还是说你这个并发量扛不住 原文地址:https://www.cnblogs.com/hnhycnlc888/p/12537239.html

性能瓶颈定位分析

1 首先进行OS层面的检查确认首先要确认当前到底是哪些进程引起的负载高,以及这些进程卡在什么地方,瓶颈是什么.一般情况下,服务器上最容易成为瓶颈的是磁盘I/O子系统,因为它的读写速度通常是最慢的;也会有其他原因: 1.某些进程/服务消耗更多CPU资源(服务响应更多请求或存在某些应用瓶颈):2.发生比较严重的swap(可用物理内存不足):3.发生比较严重的中断(因为SSD或网络的原因发生中断):4.磁盘I/O比较慢(会导致CPU一直等待磁盘I/O请求):一般先看整体负载如何可以使用w 或sar -

一次服务器CPU占用率高的定位分析

背景 通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的.幸亏由于我们的服务进程由多个相同worker(线程)调度承担的,所以除了CPU占用率高之外,并没有对服务造成影响.随着上次我们找到那个吃IO的罪犯,这次我们要追捕的是潜伏在团体中的特务,更加惊险刺激哟! 系统环境 用top命令很容易定位到是谁占用CPU最高. 以我们的这个业务进程(imDevServer)举例,为什么说这货是个潜伏者呢?因为这是个多线程的进程,我们要知道实际上占用cpu的最小单位