之前写过一篇文章讨论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. 范仁义html+css课程---6、表格

    范仁义html+css课程---6.表格 一.总结 一句话总结: 表格中最常用的元素就是table.tr.td.th,还有语义化的thead.tbody.tfoot标签 1.表格构成三个基本要素? t ...

  2. Android自动化测试--monkey总结

    什么是 Monkey Monkey 是一个 Android 自动化测试小工具.主要用于Android 的压力测试, 主要目的就是为了测试app 是否会Crash. Monkey 特点 顾名思义,Mon ...

  3. 006 vue监控

    一:监视 1.使用keyup <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  4. Python3基础 dict __len__ 统计键值对的数量

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  5. Python3基础 yield 创建生成器

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程

    转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...

  7. matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind

    一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind 觉得有用的话,欢迎一起讨论相互学习~Follow Me squeeze ...

  8. 取未清PO逻辑

    注意这里的 GR qty [   WEMNG] 和 Open Quantity [OBMNG] *&---------------------------------------------- ...

  9. 编写vscode插件

    一.参考学习 https://www.cnblogs.com/liuxianan/p/vscode-plugin-publish.html https://code.visualstudio.com/ ...

  10. 【电商日志项目之四】数据清洗-ETL

    环境 hadoop-2.6.5 首先要知道为什么要做数据清洗?通过各个渠道收集到的数据并不能直接用于下一步的分析,所以需要对这些数据进行缺失值清洗.格式内容清洗.逻辑错误清洗.非需求数据清洗.关联性验 ...