# message-trunk
**Repository Path**: AFeng2016/message-trunk
## Basic Information
- **Project Name**: message-trunk
- **Description**: message-trunk是以redis为基础搭建的轻量级高性能消息总线(队列),和主流MQ相比使用起来更灵巧简便。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 102
- **Created**: 2020-08-08
- **Last Updated**: 2021-07-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# message-trunk
====================


> **message-trunk**是基于java开发的轻量级消息总线框架。
框架开发宗旨:项目内的轻量级消息队列。
框架开发目的:在项目内部,我们常常需要做异步操作,常规的做法是提交给线程池去做,这样会导致一些:
* 线程池大小不可控,任务可能因为线程池满了被抛弃。
* 任务执行失败没有重试机制。
* 任务执行失败没有统一的异常处理。
为了解决如上问题,基于redis的队列开发了该消息队列,具有如下特点:
* 足够轻量级,队列配置简单,只要使用redis即可,不需要额外部署环境;
* 支持分布式,任务提交后由多台机器分布式处理,机器资源分配合理;
* 处理效率高,任务交给多线程并发处理;
* 处理有重试机制,并且可自定义错误处理。
* 对于小型数据入队列,出队列效率高。
## Installation
maven依赖:
```
wang.moshu
mt-framework
0.0.2
```
## DEMO
运行mt-demo,打开index.jsp运行测试例子。演示地址:
简单测试:http://123.206.202.189:8080/mt-demo/index.jsp
性能测试(1核1G小机器,亲请别测试性能,已经被玩挂N次了,下载到机器上测试性能哦):http://localhost:8080/mt-demo/index-benchmark.jsp
## Requirements
* java 6.0+
## License
message-trunk is available under the Apache license, see the LICENSE file for more information.
## 使用指南
### 1.消息入队列
获取消息队列全局对象MessageTrunk(可以用spring注入),put入消息即可。
```
// 获取MessageTrunk实例
MessageTrunk mt = (MessageTrunk) SpringBeanUtils.getBean("messageTrunk");
Message message = new Message(MessageType.DEMO_MESSAGE, new DemoMessage(value));
// 消息入MT
mt.put(message);
```
### 2. 处理消息
消息处理器:继承AbstarctMessageHandler抽象类。
```
public class DemoHandler extends AbstarctMessageHandler
{
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,该命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
## 性能测试([测试链接][1])
测试环境:本人开发机器,4核i5,16GB内存,tomcat和redis在同一台机器
测试结果:最高写入消息速度为57208 ops

[1]: http://123.206.202.189:8080/mt-demo/index-benchmark.jsp