Java 为用户在应用程序中创建的每个主题创建新队列
我的应用程序使用Spring+RabbitMQ。它已经设计了两个功能,在主页上显示用户及其朋友的帖子,并为发生的任何事件提供通知功能 对于这两个特性,我在绑定到交换机的rabbitmq配置中预定义了队列。底层模式是发布-订阅 现在我对第三个功能的设计感到困惑。假设用户创建了一个 主题为“万圣节”&n用户订阅。同样,n个用户将创建他们的n个主题,其他用户将订阅该主题以进行更新。这也是一个pubsub模式 我相信每个主题都应该创建一个新的队列。那么,如何为应用程序中用户创建的每个主题动态创建一个队列呢?还是有其他方法来解决这个问题 下面是应用程序的现有队列配置Java 为用户在应用程序中创建的每个主题创建新队列,java,spring,rabbitmq,spring-amqp,Java,Spring,Rabbitmq,Spring Amqp,我的应用程序使用Spring+RabbitMQ。它已经设计了两个功能,在主页上显示用户及其朋友的帖子,并为发生的任何事件提供通知功能 对于这两个特性,我在绑定到交换机的rabbitmq配置中预定义了队列。底层模式是发布-订阅 现在我对第三个功能的设计感到困惑。假设用户创建了一个 主题为“万圣节”&n用户订阅。同样,n个用户将创建他们的n个主题,其他用户将订阅该主题以进行更新。这也是一个pubsub模式 我相信每个主题都应该创建一个新的队列。那么,如何为应用程序中用户创建的每个主题动态创建一个队列
<!-- 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>
假设一个用户创建了一个主题,比如说“万圣节”&n用户订阅它[…]这也是一个pubsub模式
虽然这是“发布”内容,而其他人“订阅”该内容,但这不是发布子模式
酒吧-酒吧模式明确地说是“把它扔到篱笆上,谁在乎谁在听,如果有人的话”。酒吧-酒吧模式只是对典型事件的一个花哨术语。这相当于有人说“嘿![事情]发生了!”而其他人则以某种方式回应,如果他们想回应的话。如果某个特定的人没有听到事情发生了,那就太糟糕了。他们没有得到发生那件事的通知。就像和朋友出去一样。如果你的一个朋友不在那里,那么当他们决定去的时候,他们就不能去“那里”。他们已经错过了机会
在你的情况下,你描述的是一份报纸或印刷杂志。正在发布内容供其他人使用。订阅者希望文章和报告在将来的某个时候交付给他们。如果他们没有收到杂志或报纸向他们承诺的信息,他们会感到不安。事件发生时,他们不必亲自“在场”。事情发生后,他们会收到一份报告,并保证(在一定程度上)收到报告
我相信每个主题都应该创建一个新的队列
这是一个非常糟糕的主意。由于RabbitMQ配置和实例的大小和复杂性,您将很快遇到严重的性能问题。如果队列被多次使用,您将得到成千上万个很少使用的队列
不过,更糟糕的是,您可能最终会将队列视为一个数据库。一旦您意识到无法查询队列或多次读取同一消息,事情就会很快崩溃
那么,如何为应用程序中用户创建的每个主题动态创建一个队列呢
简单的回答是:不要
还是有其他方法来解决这个问题
消息队列是在进程之间推送数据的好方法。为此使用消息服务
您需要的是数据库设计,您可以跟踪谁订阅了什么内容,等等
所有这些都是按照我所写的内容进行的: