开源秒杀项目miaosha解读
逻辑图
项目结构
项目git地址: https://gitee.com/1028125449/miaosha
message-trunk项目介绍
项目地址: https://gitee.com/1028125449/message-trunk
message-trunk是以redis为基础搭建的轻量级高性能消息总线(队列),和主流MQ相比使用起来更灵巧简便,miaosha项目中使用了message-trunk来替代MQ实现消息队列。
message-trunk的主要特点
- 足够轻量级,队列配置简单,只要使用redis即可,不需要额外部署环境;
- 支持分布式,任务提交后由多台机器分布式处理,机器资源分配合理;
- 处理效率高,任务交给多线程并发处理;
- 处理有重试机制,并且可自定义错误处理。
- 对于小型数据入队列,出队列效率高。
pom依赖
<dependency> <groupId>wang.moshu</groupId>
<artifactId>mt-framework</artifactId>
<version>0.0.2</version>
</dependency>
使用指南
1. 消息入队列
获取消息队列全局对象MessageTrunk(可以用spring注入),put入消息即可。
// 获取MessageTrunk实例MessageTrunk mt = (MessageTrunk) SpringBeanUtils.getBean("messageTrunk");
Message<DemoMessage> message = new Message<DemoMessage>(MessageType.DEMO_MESSAGE, new DemoMessage(value));
// 消息入MT
mt.put(message);
2. 处理消息
消息处理器:继承AbstarctMessageHandler抽象类。
public class DemoHandler extends AbstarctMessageHandler<DemoMessage>{
private static Log logger = LogFactory.getLog(DemoHandler.class);
public DemoHandler()
{
// 说明该handler监控的消息类型
super(MessageType.DEMO_MESSAGE);
}
/**
* 监听到消息后处理方法
*/
@Override
public void handle(DemoMessage message)
{
// do handle
}
@Override
public void handleFailed(DemoMessage obj)
{
// handle failed
}
}
实现原理
基本原理是redis的阻塞取命令: Blpop,该命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
以上是 开源秒杀项目miaosha解读 的全部内容, 来源链接: utcz.com/z/514374.html