一个消息队列
消息队列的模式
1. 简单模式:当客户端(生产者)将消息写入到消息队列中时,消息队列中消息的数量加1,消费者实时监听消息队列,当队列中有消息时,则获取消息,之后执行业务逻辑,同时消息队列的消息数量减1。

2. 工作模式:由一个生产者负责消息写入队列,但是如果只有一个消费者负责消费,可能会造成消息的积压,所以准备多个消费者共同消费一个队列中的消息。

3. 发布/订阅模式(Publish/Subscribe):一个生产者发送的消息会被多个消费者获取,每个消费者得到的消息是一样的,这点不同于工作模式比如微信公众号,不同的人订阅同一个公众号,收到的消息都是一样的。

发布订阅模式的消息队列具体实现
一个topic(可认为成公众号)只产生一种类型的消息,topicName(公众号名字)用来标识公众号,具有唯一性。订阅某一个公众号的所有订阅者们都具有相同的topicName,每个topic包含一个成员变量set来存储它们的全部订阅者。整体的框架图如下:

1)消息处理函数的类型抽象:M:消息类型参数化。 T:消息处理类类型参数化。
2)消息处理线程的类型抽象:一个消息处理线程监听一个消息队列,不断从消息队列中取出消息到临时队列,然后调用传递进来的消息处理类的成员函数进行处理。
3)消费者类型抽象:每个订阅者(Subscriber)需要知道自己订阅了什么公众号(topicName)。有消息提醒时就去浏览信息(消息处理线程)。
4)生产者类型抽象:用 topicName 来表示一个公众号,一个公众号只可以产生一种类型的消息,可以有很多个人(Subscriber)进行订阅,成员变量包含一个set来存储所有的订阅者。当有消息产生的时候,每个订阅者者都会收到相同的消息。
5)订阅流程类型抽象:
消息队列使用