开源秒杀项目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

回到顶部