我正在实现一个解决方案,其中许多节点侦听使用ServiceStack.Redis实现的许多Redis消息队列。在系统内,每个节点服务于特定的“信道”和信道上的特定操作。例如邮件可能是入站电子邮件,频道可能是“abc”。
会有很多频道,但会有固定数量的消息类型。
我周末在ServiceStack源代码中四处寻找,并在RedisMessageQueueClient和RedisMqHost上实现了几个变体。我们的想法是在构造时传递“通道”,然后将其用于构造要发布/保存的队列名称。
现有的RedisMqHost和RedisMessageQueueClient在内部使用QueueNames static生成队列名称,但由于这会生成一个纯粹基于类型名称的队列,所以我无法仅为特定通道提供服务。我更新的代码将通道名称附加到队列名称的末尾。
e.g。所以对于“abc”频道,mq:InboundEmail:in会变成mq:InboundEmail:in:abc
代码感觉不对,因为我改变了几个地方,但QueueNames类在整个过程中使用。
两个问题:
是多个消息队列正确的基础设计?这应该被建模为多个Redis数据库(听起来不对)还是我的设计有大量队列适当?我想我们每个频道都会看到大约一千个频道和四到五个队列。
是否存在一个我错过的消息队列分区的现有机制 - 感觉它应该是一个相当标准的要求而且它已经发生在已经存在的In队列,Out队列和每种消息类型的优先级和Dlq队列。