gpt4 book ai didi

java - 为用户在应用程序中创建的每个主题创建一个新队列

转载 作者:行者123 更新时间:2023-11-30 03:06:32 24 4
gpt4 key购买 nike

我的应用程序使用 Spring + RabbitMQ。它已经设计了两个功能,在主页上显示用户及其 friend 的帖子以及已发生的任何事件的通知功能。

对于这两个功能,我在绑定(bind)到交换器的rabbitmq配置中预定义了队列。底层模式是发布订阅。

现在我对第三个功能的设计感到困惑。假设用户创建了一个一个主题说“万圣节”,并且有 n 个用户订阅它。类似地,n 个用户将创建他们的 n 个主题,其他用户将订阅它以获取更新。这也是一种发布订阅模式。

我相信对于每个单独的主题都应该创建一个新的队列。那么如何为用户在应用程序中创建的每个主题动态创建一个队列呢?或者有其他方法可以解决这个问题吗?

以下是应用程序的现有队列配置。

<!-- Creates a queue for consumers to retrieve messages -->
<rabbit:queue name="UserPostpublishQueue" durable="true"/>

<!-- queue for sending notifications to users -->
<rabbit:queue name="notificationQueue" durable="true"/>

<!-- Fanout exchange for a pubsub bound to UserPostpublishQueue -->
<fanout-exchange name="broadcastPosts" durable="true" xmlns="http://www.springframework.org/schema/rabbit">
<bindings>
<binding queue="UserPostpublishQueue"/>
</bindings>
</fanout-exchange>

<!-- Direct exchange for a broadcasting notifications -->
<rabbit:direct-exchange name="broadcastNotifications" durable="true" xmlns="http://www.springframework.org/schema/rabbit">
<bindings>
<binding queue="notificationQueue" key="notifications"/>
</bindings>
</rabbit:direct-exchange>

最佳答案

Say a user creates a a topic say "Halloween" & n users subscribe to it [...] This too is a pubsub pattern.

虽然这是内容的“发布”,其他人“订阅”该内容,但这不是发布-订阅模式。

发布-订阅模式明确是关于“把它扔过栅栏,谁在乎谁在听,如果有人的话”。发布-订阅模式只是典型事件的一个奇特术语。这相当于有人说“嘿![事情]发生了!”以及其他人以某种方式回应,如果他们想回应的话。如果没有一个特定的人在那里听到事情发生,那就太糟糕了。他们没有注意到那件事的发生。就像和 friend 出去一样。如果你的一位 friend 不在那里,那么当他们决定去那里时,他们就无法“在那里”。他们已经错过了机会。

在您的情况下,您正在描述一份报纸或打印杂志。正在发布内容供其他人使用。订阅者希望在将来的某个时候将文章和报告发送给他们。如果他们没有收到杂志或报纸所 promise 的信息,他们会感到不安。当事件发生时,他们不必亲自“在场”。他们在事情发生后会收到报告,并且(在一定程度上)保证会收到报告。

I believe for every individual topic a new queue should be created.

这是一个非常糟糕的主意。由于 RabbitMQ 配置和实例的大小和复杂性,您很快就会遇到严重的性能问题。如果多次使用的话,您最终会得到成千上万个很少使用的队列。

但更糟糕的是,您最终可能会将队列视为数据库。一旦您意识到无法查询队列或多次读取同一条消息,事情就会很快崩溃。

So how do I dynamically create a queue for every topic created by the user in the application?

简短的回答是:不要。

Or there is some other way to deal with this?

消息队列是在进程之间推送数据的好方法。为此使用消息传递服务。

您想要的是数据库设计,您可以在其中跟踪谁订阅了哪些内容等。

所有这些都遵循我所写的内容:

关于java - 为用户在应用程序中创建的每个主题创建一个新队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34627487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com