之前写过一篇文章讨论VirtualTopic,但觉得不够透彻,这里再根据实验结果进行一次横向对比破除模糊和选择困难症。

文章中核心对比要素是:消息副本和负载均衡

Queue的特点和优势

ActiveMQ中Queue适用于“一对一”场景,单条消息无副本,只会被一个消费者消费。如果单个队列同时有多个消费者连接,则消息会按照一定的顺序依次发送给不同消费者消费,例如10条消息发送给5个消费者,那么消费者(1,2,3,4,5)分别获得(2,1,3,2,2)条消息,这就实现了负载均衡。

所以Queue的特点是:无副本,可负载

Topic的特点和优势

ActiveMQ中Topic适用于“一对多”场景,单条消息有副本,同时被多个消费者消费,如果单个Topic同时有多个消费者连接,则消息按照副本形式全量发送给不同消费者,例如10条消息发送给5个消费者,那么消费者(1,2,3,4,5)分别获得(10,10,10,10,10)条消息,显然无法实现负载均衡。

所以Topic的特点是:有副本,不可负载

VirtualTopic的特点和优势

Queue是无副本,可负载, Topic是有副本,不可负载, 那么还有一种场景需要有副本,可负载,为了满足这种需求,VirtualTopic机制被加入了进来,VirtualTopic使用生产者发送的Topic实现了有副本, 使用消费者消费的Queue实现了可负载,所以VirtualTopic的特点是:有副本,可负载

这里补充一下VirtualTopic的使用说明:

VirtualTopic是一种内嵌机制,默认开启无需配置,使用者通过使用特殊命名的Topic和Queue来使用VirtualTopic机制,默认的命名方式是:

Topic:   VirtualTopic.>
Queue: Consumer.*.VirtualTopic.> # * 和 > 表示通配符
# 例如如果Topic命名为: VirtualTopic.Test,那么Queue就要命名为Consumer.A.VirtualTopic.Test 才能收到来自Topic分发的消息

当然我们可以自己配置相应的命名方式:

vim activemq.xml

<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<virtualTopic name="NewVirtualTopic.>" prefix="VirtualTopicConsumers.*."/>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors> # <virtualTopic name="NewVirtualTopic.>" prefix="VirtualTopicConsumers.*."/> 中 name表示 Topic的命名方式,prefix表示 Queue相对于Topic的前缀
# 例如Topic 需要命名为 NewVirtualTopic.Test , Queue需要命名为 VirtualTopicConsumers.A.NewVirtualTopic.Test
# * 和 > 都是通配符,可以混用

总结

到这里,我们可以按照 消息副本和负载均衡两个关键点来对三者进行区分:

无副本,可负载 使用 Queue

有副本,不可负载 使用 Topic

有副本,可负载 使用VirtualTopic

这两个区分点可以说是这三种机制的核心特点,并且不论是否持久化都成立。我们可以具此匹配不同的业务场景酌情使用,至于剩下的那种情况应该是没有需求的。

ActiveMQ Queue vs Topic vs VirtualTopic的更多相关文章

  1. ActiveMQ queue和topic,持久订阅和非持久订阅

    消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者).queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者. ...

  2. ActiveMQ的queue以及topic两种消息处理机制分析

    1    queue与topic的技术特点对比 对比项 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状 ...

  3. activemq安装运行及其在springboot中的queue和topic使用

    安装activemq 运行 springboot使用 依赖 配置 Producer Consumer ComsumerTopic 使用 安装activemq http://activemq.apach ...

  4. SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)

    目录 一.前言 二.ActiveMq的下载和使用 三.依赖准备 四.yml文件配置 五.配置Bean 六.创建生产者(Queue+Topic) 七.创建消费者(Topic模式下) 八.测试结果(Top ...

  5. 【ActiveMQ入门-5】ActiveMQ学习-Queue与Topic的比较

    Queue与Topic的比较 1.JMS Queue执行load balancer语义: 一条消息仅能被一个consumer收到. 如果在message发送的时候没有可用的consumer,那么它将被 ...

  6. queue与topic的技术特点对比

    1    queue与topic的技术特点对比 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状态 to ...

  7. springboot使用activemq同时接收queue和topic消息

    原文链接:https://blog.csdn.net/jia_costa/article/details/79354478 新建springboot项目, pom文件如下 <?xml versi ...

  8. ActiveMQ——activemq的详细说明,queue、topic的区别(精选)

    JMS中定义了两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic).主要区别就是是否能重复消费. 点对点:Queue,不可重 ...

  9. ActiveMQ queue 分页

    分页:即获取部分数据,queue按页从message cursor读取消息,然后分发给consumer. 页大小: public abstract class BaseDestination impl ...

随机推荐

  1. mysql实现oracle存储过程默认参数

    我们都知道oracle存储过程支持为参数设置默认值,这样即使存储过程升级,原来的调用也可以不受影响.但是mysql不支持,mariadb也没有支持(截止10.4也是如此).但是这一限制会导致升级麻烦重 ...

  2. 百度开源上传组件webuploader 可上传多文件并带有进度条

    //上传多文件 function UploadMultiFile() { var uploader = WebUploader.create({ // 选完文件后,是否自动上传. auto: true ...

  3. Spring cloud微服务安全实战-6-11sentinel之配置持久化

    规则的持久化问题.现在的规则都是在内存里的,我们要写一些代码来编一些规则.启动以后规则在内存里了.如果你配置里面有sentinel的dashboard,有流量经过客户端的时候,它会把规则同步给Dash ...

  4. nodejs 读取目前下所有文件

    var fs = require('fs'); var join = require('path').join; function getJsonFiles(jsonPath) { let jsonF ...

  5. rqalpha学习-2

    conf = default_config()deep_update(user_config(), conf)deep_update(project_config(), conf)   三种不同级别的 ...

  6. codeMirror配置

    介绍 CodeMirror是一款在线的支持语法高亮的代码编辑器.官网:http://codemirror.net/ 下载后,解压开到的文件夹中,lib下是放的是核心库和核心css,模式下放的是各种支持 ...

  7. Influx Sql系列教程二:retention policy 保存策略

    retention policy这个东西相比较于传统的关系型数据库(比如mysql)而言,是一个比较新的东西,在将表之前,有必要来看一下保存策略有什么用,以及可以怎么用 I. 基本操作 1. 创建re ...

  8. matlab调试时子函数断点不起作用

    matlab调试代码时总是遇到这样一个奇怪的问题,就是当我在主程序(.m脚本)中调用子函数并在子函数中设置断点,然后开始调试运行主程序... 发现主程序直接运行到结束而并没有在调用子函数的时候在所设置 ...

  9. 为Ubuntu笔记本电脑创建WiFi热点共享上网

    from: linux公社 http://www.linuxidc.com/Linux/2014-02/97139.htm   该文由土木坛子转译而来,说是转译,其实看截图就可以方便的设置,没有任何命 ...

  10. LeetCode 290. 单词规律(Word Pattern) 41

    290. 单词规律 290. Word Pattern 题目描述 给定一种规律 pattern 和一个字符串 str,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如,pattern ...