消息发布者如何向客户提供有关队列URL的建议?

时间:2017-06-13 10:08:38

标签: java message-queue amazon-sqs

在Amazon SQS中,邮件发布者创建队列并在其上发布消息。但是,要从队列中使用消息,客户端需要知道队列URL,显然只有发布者知道。

我是否遗漏了有关队列架构如何工作的内容?

1 个答案:

答案 0 :(得分: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可能已经存在,&#34;并且URL将被提供给W1和W2 - 可能是在它们最初启动时。传入的请求可以告知W2 Q2的URL,或者W2可能总是将其结果返回到Q2,在这种情况下,W1不需要在原始消息中指定它。

谁创建队列以及队列的生产者和/或消费者如何学习队列URL的问题是体系结构过程的一部分 - 绝对没有一般原则表明生产者会是最有可能的队列创建者。谁做了什么在很大程度上取决于队列的使用原因和工作流程的性质。