第二版已经发布,支持泛型,代码更安全,更简单:
http://my.oschina.net/myaniu/blog/486717
zbus
https://git.oschina.net/rushmore/zbus
轻量级服务总线/消息队列
1)多种消息模式--支持生产者/消费者,发布订阅,RPC
2)丰富的API--C/C++/C#/JAVA/Python/Node.JS跨平台、多语言支持
3)开放协议标准--原生兼容HTTP协议(长连接),头部动态扩展
4)支持TrackServer与ZbusServer高可用横向动态扩容机制
jfinal
https://git.oschina.net/jfinal/jfinal
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
因项目中用的jfinal和zbus,于是做了一个插件。方便使用。
插件git@osc地址如下:
https://git.oschina.net/myaniu/jfinal-zbus
使用说明如下:
1)导入dist目录下的jfinal-zbus-1.2.0.jar
2)在jfinal核心配置文件中的configPlugin函数中添加如下代码
//zbus插件
/*
SingleBrokerConfig singleBrokerConfig = new SingleBrokerConfig();
singleBrokerConfig.setBrokerAddress("127.0.0.1:15555");
ZbusPlugin zp = new ZbusPlugin(singleBrokerConfig);
HaBrokerConfig haBrokerConfig = new HaBrokerConfig();
haBrokerConfig.setTrackAddrList("127.0.0.1:16666;127.0.0.1:16667");
ZbusPlugin zp = new ZbusPlugin(haBrokerConfig);
*/
ZbusPlugin zp = new ZbusPlugin("127.0.0.1:15555");
zp.registMqProducer("MyMQ");
//mq,topic,mqTopic(别名,方便发送时使用)
zp.registPubSubProducer("TopicMq", "Check","CheckTopic");
zp.registMqConsumer("MyMQ", new MessageCallback(){
@Override
public void onMessage(Message msg, Session session) throws IOException {
LOG.info("mq=" + msg.getMq() + ",body="+ msg.getBodyString());
}
});
//mq,topic,MessageCallback
zp.registPubSubConsumer("TopicMq", "Check", new MessageCallback(){
@Override
public void onMessage(Message msg, Session session) throws IOException {
LOG.info("mq=" + msg.getMq() + ",body="+ msg.getBodyString());
}
});
me.add(zp);
Message msg = new Message();
msg.setBody("这时一条测试MQ的同步消息");
Zbus.syncSendToMq("MyMQ", msg, 1000);
//Zbus.asyncSendToMq(mq, msg, callback);
msg = new Message();
msg.setBody("这时一条测试Topic的异步消息");
//Zbus.syncSendToTopic(mqTopic, msg, timeout);
Zbus.asyncSendToTopic("CheckTopic", msg, new ResultCallback(){
@Override
public void onCompleted(Message msg) {
LOG.info(msg.getMsgId());
}
});
具体应用中可以用JSON序列化对象存入Message的body中,收到后再反序列化。
建议所有MQ名/topic名在统一的文件中定义,不要在代码中直接写字符串。