在Amazon SQS中,消息发布者创建队列并将消息发布到队列上。但是,要使用队列中的消息,客户端需要知道队列URL,而(显然)只有发布者知道。
关于队列架构的工作原理,我是不是遗漏了什么?
发布于 2017-06-14 00:30:35
关于队列架构的工作原理,我是不是漏掉了什么?
我想是这样的。
队列有生产者和消费者...但这两个实体都不一定创建队列。当然,它们都必须--通过某种机制--学习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 (发送请求的位置)和Q2(请求发送响应的位置)的URL值。Q1的生产者可能不会负责创建Q1。Q1应该已经存在了。它可能负责创建Q2,而它将成为它的消费者。
相反,W2只需要知道Q1的URL,这是它被分配为使用者的队列。如上所述,Q1很可能“已经存在”,并且URL将同时提供给W1和W2 --可能是在它们最初启动时。传入的请求可以通知W2 Q2的URL,或者W2可能总是将其结果返回给Q2,在这种情况下,W1将不需要在原始消息中指定这一点。
谁创建队列以及队列的生产者和/或消费者如何了解队列URL的问题是体系结构过程的一部分--大多数情况下,没有一般原则表明生产者最有可能是队列的创建者。谁来做什么很大程度上取决于使用队列的原因和工作流程的性质。
https://stackoverflow.com/questions/44518430
复制相似问题