当前位置: 首页 > 知识库问答 >
问题:

JMS2.0:主题上的共享持久消费者与队列上的异步消费者;裁判。官方GlassFish 4.0文档/JavaEE-教程Java EE 7

爱琪
2023-03-14

首先,让我们从topic的目的地类型开始。根据GlassFish 4.0教程“46.4编写高性能和可伸缩的JMS应用程序”一节:

本节描述如何使用JMS API编写能够稳健地处理大量消息的应用程序。

在“46.4.2使用共享持久订阅”小节中:

java客户机展示了如何使用共享持久订阅。它展示了共享持久订阅如何将持久订阅的优点(当客户端不在时订阅保持活动)与共享使用者的优点(消息加载可以在多个客户端之间划分)结合在一起。

当我们按照“46.4.2.1运行ShareDurableSubscriberExample和Producer Clients”运行这个示例时,它给我们的效果/功能与前面的示例在目的地类型的队列上的效果/功能相同:如果我们按照“46.2.6.2运行AsynchConsumer和Producer Clients”执行,则点5点以上--并使用2个consumer terminal-windows和1个Producer Terminal-Window稍微修改它。

准确的技术答案是什么:为什么在本例中,主题上使用Shared-Durable-Consumer应该是“高性能和可伸缩的JMS应用程序”,并在“高性能和可伸缩的JMS应用程序”下提到,而在队列上使用异步消费者?

共有1个答案

狄飞鹏
2023-03-14

我对同样的问题很好奇,所以我找到了下面的链接。我知道约翰·阿姆给了你正确的回应,也许只是太短了,无法得到充分的理解。

基本上,当您创建一个主题时,您假设只有订阅的使用者才会收到它的消息。然而,处理这样的消息可能需要大量的处理;在这种情况下,您可以使用您想要的任意多的线程来创建一个共享主题。

为什么不使用队列?答案很简单,如果您使用队列,那么只有一个使用者能够处理这样的消息。

 类似资料:
  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?

  • 我花了几个小时想弄清楚发生了什么,但没能找到解决办法。 这是我在一台机器上的设置: 1名zookeeper跑步 我正在使用kafka控制台生成器插入消息。如果我检查复制偏移量(

  • 我有一个主题列表(目前是10个),其大小可以在未来增加。我知道我们可以产生多个线程(每个主题)来消耗每个主题,但在我的例子中,如果主题的数量增加,那么消耗主题的线程数量也会增加,这是我不希望的,因为主题不会太频繁地获取数据,所以线程将是理想的。 有没有办法让单个消费者从所有话题中消费?如果是的话,我们怎样才能做到呢?另外,Kafka将如何维护抵消?请建议答案。

  • 现在,让我们考虑另一个场景(我没有尝试过,但我很好奇),在这个场景中,我启动了两个使用者进程和,这两个进程都具有相同的组,并且它们都是一个单线程进程。现在我的问题是: > 在这种情况下,两个独立的使用者进程(在同一个组下)将如何与分区相关?与上面的单进程多线程场景有何不同? 一般来说,使用者线程或进程如何与主题中的分区映射/相关? 关于将消费者实现为进程与线程,我在这里遗漏了什么微妙的事情吗?提前

  • 然而,当在我的环境中测试此示例时,我得到了一个异常。

  • 这与以下问题几乎相同:发送给具有相同消费者组名称的所有消费者的消息。公认的答案是使用Kafka 0.8.1或更高版本,我就是这么做的。 Kafka留档说: 如果所有使用者实例都具有相同的使用者组,则其工作原理就像在使用者之间平衡负载的传统队列一样。 但是我无法使用 Kafka 0.8.2.1 和 kafkacat 观察到这种行为。 我的设置: Kafka Zookeeper 运行在 spotify