【发布时间】:2020-09-12 16:57:21
【问题描述】:
正如answer中提到的,
消息队列是单向管道:一个进程写入队列,另一个进程按顺序读取数据
SysV 消息队列就是一个例子
所以,我的理解是,
一个消息队列被两个进程使用,一个进程(生产者)在队列中插入一个项目,另一个进程(消费者)从队列中消费该项目
1) RabbitMQ 或 Kafka 消息队列是 1:1 消息系统吗? 仅两个进程使用,一个进程写入,另一个进程读取......
2) 消费者消费完商品后,商品是否会被删除?如果不是,为什么我们需要队列数据结构?为什么不只是共享内存?
【问题讨论】:
-
Kafka 存储不可变的记录日志,这些记录由称为生产者的进程写入并由称为消费者的进程读取。这非常符合你的定义。我以前从未听说过将 1:1 消息传递系统用作术语,但在 Kafka 的情况下,一条记录只能被写入一次,但可以被许多不同的消费者读取多次,而这些消费者彼此之间不需要任何了解。这是使它与rabbitmq有些不同的一个方面。
-
@dawsaw 说有 10 个消费者,那么,你的意思是,Kafka 消息队列中的一个元素在 10 个消费者全部消费之前不会被删除?它是如何工作的?
-
在代理(服务器端)根据保留策略(可能基于时间或大小)删除它之前,它不会被删除。消费者对何时从队列中删除记录没有任何发言权,这一切都在代理本身上完成。我相信这是与rabbitmq等传统消息队列的关键区别
-
@dawsaw 那么,当项目没有被删除时,维护队列有什么意义呢?为什么不只维护一些地图或共享内存?
标签: java apache-kafka rabbitmq ipc message-queue