我最初在这里问了这个问题,但我意识到我的问题不是关于 while-true 循环。我想知道的是,在 Java 中进行高性能异步消息传递的正确方法是什么?
我正在尝试做的...
我有大约 10,000 个消费者,每个消费者都从他们的私人队列中消费消息。我有一个线程一一生成消息并将它们放入正确的消费者队列中。每个消费者无限循环,检查消息是否出现在其队列中并处理它。
我相信这个术语是“单一生产者/单一消费者”,因为有一个生产者,每个消费者只在他们的私有队列上工作(多个消费者从不从同一个队列中读取)。
Consumer.java 内部:
@Override
public void run() {
while (true) {
Message msg = messageQueue.poll();
if (msg != null) {
... // do something with the message
}
}
}
生产者正在快速将消息放入消费者消息队列中(每秒数百万条消息)。消费者应该尽快处理这些消息!
注意:while (true) { ... }
由 Producer 作为其最后一条消息发送的 KILL 消息终止。
但是,我的问题是关于设计此消息传递的正确方法。我应该为 messageQueue 使用哪种队列?它应该是同步的还是异步的?Message应该如何设计?我应该使用 while-true 循环吗?消费者应该是一个线程还是其他什么?10,000 个线程会慢到爬行吗?线程的替代品是什么?
那么,在 Java 中进行高性能消息传递的正确方法是什么?