我的应用程序使用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>
所以,德里克如果我们只保存在数据库中的一切就不是穿上分贝额外负载,而不是轮询队列应用程序将轮询数据库添加任何新的数据。我明白队列不是数据库。如何将数据存入数据库并为最新数据设置一个通用队列或集中队列,如果有新帖子,它肯定会推送给用户,而无需轮询数据库。我们可以随时清除队列中的旧数据。 – underdog