我正在研究如何使用kafka满足我们的需求,并想知道消费者是否可以直接查询来自生产者的数据。 根据我对kafka的理解,人们可以从一端生产并从另一端消费,但消费者无法与生产者进行交互式沟通。它必须是一个不同的技术堆栈?就像在Redis中存储一样?
如果我可以自定义交换,RabbitMQ是否提供此功能?
答案 0 :(得分:2)
所以,我需要首先指出“直接向生产者查询”和“与生产者交互式沟通”之间存在差异。
首先,让我们将生产者定义为“生成消息的人。”同样,我们可以将消费者定义为“接收和处理消息的人。”
然后,采用该定义,您意识到,在任何实际的,真实的消息传递系统中,与消息传递系统相关的所有内容在某种程度上都是生产者和消费者。
通常,您设置特定服务以接受来自队列的消息,然后生成一些结果消息并将其发布回代理,然后将其路由到适当的队列以供另一个(通常是最初生成的)服务使用。这种设置称为请求 - 响应。
底线
在RabbitMQ下无法直接从生产者查询消息。生产者将消息放在交换机上,在那里它们被路由到一个或多个队列。消费者从队列接收消息时没有任何先验洞察谁准确生成每条消息。
可以与特定消息的制作者进行通信。为此,原始生成器设置一个回复队列,该队列通常是一个随机命名的队列,一旦原始生产者收到回复并断开连接就会自动删除。这是许多设置之一。请查看this example,了解有关此功能的详细信息。