2017-06-13 26 views

回答

0

我在这里错过了关于队列架构的工作原理吗?

我怀疑是这样。

队列有生产者和消费者......但这些实体都不一定会创建队列。他们两个都必须 - 通过某种机制 - 学习URL,当然,但这种情况完全取决于应用程序。

队列(因此​​它的URL)通常是永久性的(不是瞬态的),并且在配置过程(自动或手动)中创建 - 而不是由生产者创建。

虽然生产者有可能创建队列,但消费者也可以创建队列,然后(直接或间接地)通知最终成为生产者的进程,以便发送任何消息。

工作者进程成为一个队列的消费者,另一个生产者到另一个队列......或工人与多个队列交互也很常见。

"W" = workers, "P" = producer, "C" = consumer, "Q" = queue, "T" = task 

W1 (now a producer) >> Q1 >> "Please perform task T1 and send results to Q2" 
W2 (now a consumer) << Q1 << "Please perform task T1 and send results to Q2" 
W2 (performs task T1) 
W2 (now a producer) >> Q2 >> "Here are the results from task T1" 
W1 (now a consumer) << Q2 << "Here are the results from task T1" 

在这个例子中,W1是Q1的生产者和Q2的消费者;它需要知道Q1的URL(发送请求的位置)和Q2(请求发送响应的位置)。 Q1的生产商可能不会负责创建Q1。 Q1已经存在。它可能负责创建Q2,为此它将成为消费者。

相反,W2只需要知道Q1的URL,它是分配给消费者的队列。如上所述,Q1可能“已经存在”,并且该URL将被提供给W1和W2--可能在它们最初启动时。传入的请求可以通知W2 Q2的URL,或者W2可能总是将其结果返回给Q2,在这种情况下,W1不需要在原始消息中指定它。

谁创建队列以及队列的生产者和/或消费者如何学习队列URL的问题是体系结构过程的一部分 - 绝对没有一般原则建议生产者将是队列中最可能的创建者。谁做什么强烈依赖队列被使用的原因和工作流的性质。

相关问题