Score
0
Watch 92 Star 200 Fork 81

kater / message-trunkJavaApache-2.0

Join us
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
message-trunk是以redis为基础搭建的轻量级高性能消息总线(队列),和主流MQ相比使用起来更灵巧简便。 spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

message-trunk

====================

License Platform

message-trunk是基于java开发的轻量级消息总线框架。

框架开发宗旨:项目内的轻量级消息队列。 框架开发目的:在项目内部,我们常常需要做异步操作,常规的做法是提交给线程池去做,这样会导致一些:

  • 线程池大小不可控,任务可能因为线程池满了被抛弃。
  • 任务执行失败没有重试机制。
  • 任务执行失败没有统一的异常处理。

为了解决如上问题,基于redis的队列开发了该消息队列,具有如下特点:

  • 足够轻量级,队列配置简单,只要使用redis即可,不需要额外部署环境;
  • 支持分布式,任务提交后由多台机器分布式处理,机器资源分配合理;
  • 处理效率高,任务交给多线程并发处理;
  • 处理有重试机制,并且可自定义错误处理。
  • 对于小型数据入队列,出队列效率高。

Installation

maven依赖:

<!-- https://mvnrepository.com/artifact/wang.moshu/mt-framework -->
<dependency>
    <groupId>wang.moshu</groupId>
    <artifactId>mt-framework</artifactId>
    <version>0.0.2</version>
</dependency>

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<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,该命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

性能测试(测试链接

测试环境:本人开发机器,4核i5,16GB内存,tomcat和redis在同一台机器 测试结果:最高写入消息速度为57208 ops 输入图片说明

Comments ( 14 )

Sign in for post a comment

Java
1
https://gitee.com/1028125449/message-trunk.git
git@gitee.com:1028125449/message-trunk.git
1028125449
message-trunk
message-trunk
master

Help Search

205735 778617b6 1899542 205747 347fc4a1 1899542