一个简易版的消息队列模型:
这里一共有四种角色:
- queue:消息队列;
- Publisher:消息发布者,可以向任何一个队列发布消息;
- Listener:消息监听者,一个 Listener 同时只能监听一个 queue 的消息;但一个 queue 可同时被多个 Listener 监听;
- MqServer:消息队列服务器,负责管理所有的队列。
首先定义 MqServer,queue 都在 MqServer 里面:
package per.lvjc.concurrent.waitnotify;
import java.util.ArrayDeque;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
public class MqServer {
private final Map<String, Queue<String>> queues;
public MqServer() {
this.queues = new HashMap<>();
}
/**
* 创建队列
* @param name 队列名称
*/
public synchronized void createQueue(String name) {
queues.put(name, new ArrayDeque<>());
System.out.println("成功创建队列: " + name);
}
/**
* 根据队列名称获取队列
* @param name 队列名称
* @return
*/
public synchronized Queue<String> getQueueByName(String name) {
Queue<String> queue = queues.get(name);
if (queue == null) {
System.out.println("队列 [" + name + "] 不存在!");
return null;
}
return queue;
}
}
然后定义 Listener:
package per.lvjc.concurrent.waitnotify;
import java.util.Queue;
public class Listener {
priv