前言
在后端编程时,对需要立即返回的数据我们应当立刻返回,而对于可以慢慢处理而业务复杂的我们可以选择延迟返回。这个实现使用到了异步消息队列。
异步消息队列
主要用于实现生产者-消费者模式。也就是说,这个队列应当是可以阻塞的,否者会带来大量的性能浪费。
生产者-消费者模式
更加详细的介绍我找到了一篇博客,讲得挺好的,我就不详细说了。生产者消费者模式-Java实现
实现
1.定义事件类型 -- 定义Enum类 -- EnumType
用于表示该事件的类型
public enum EventType {
//这里列举了四种类型
LIKE(0),
COMMENT(1),
LOGIN(2),
MAIL(3);
private int value;
EventType(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
2.定义事件的实体 -- EventModel
这里说明一下entityOwnerId的必要性。举个例子,当我们给一个人点赞时,系统要给那个人(也就是entityOwnerId)发送一个站内信,通知那个人他被点赞了。当然,我们也可以把entityOwnerId包装在exts里,但因为几乎每一个事件都需要这个字段,所以这里我们开一个字段给他。
public class EventModel {
//之前定义的事件类型
private EventType type;
//触发者的id
private int actorId;
//entityId和entityType共同组成了所触发的事件
private int entityId;
private int entityType;
//该事件的拥有者
private int entityOwnerId;
//需要传输的额外信息
private Map<String, String> exts = new HashMap<>();
public Map<String, String> getExts() {
return exts;
}
public EventModel() {
}
public EventModel(EventType type) {
this.type = type;
}
public String getExt(String name) {
return exts.get(name);
}
public EventModel setExt(String name, String value) {
exts.put(name, value);
return this;
}
public EventType getType() {
return type;
}
public EventModel setType(EventType type) {
this.type =