轻量级java消息中间件简介

uncode-mq

java轻量级消息中间件。https://github.com/uncodecn/uncode-mq


功能特点

  1. 消息存储速度非常快速。
  2. 使用简单方便,目前只支持topic方式。
  3. 依赖java环境。

说明:目前只在部分项目中使用,欢迎学习交流。


模块架构

umq

说明:集群由多个Group组成一个队列,每个Group由Master和Salve两个Broker组成,整体无中心架构。


部署

下载文件解压umq-*.tar.gz到任意目录。

2 配置信息

在conf/config.properties文件中填写相关信息。

mq.host=192.168.1.43 #本机ip
mq.port=9000 #端口
mq.replica.host=192.168.7.131 #本机作为备机的主机ip
mq.replica.fetch.size=100 #每次备份时同步的数据条数,默认30
mq.replica.fetch.interval=2 #备份同步时间间隔,默认2秒
mq.log.dir=./data #数据存储目录,默认data,不建议修改
mq.data.persistence.interval=2 #数据持久化的时间间隔,默认2秒
mq.enable.zookeeper=true #是否使用zk,集群环境下必须使用
mq.zk.connect=192.168.1.14:2181 #zk地址
mq.zk.username=admin #zk用户名
mq.zk.password=password #zk密码
mq.zk.connectiontimeout.ms=6000 #zk连接超时时间
mq.zk.sessiontimeout.ms=6000 #zk连接session过期时间
mq.zk.data.persistence.interval=6000 #zk数据同步时间,默认6秒

3 启动执行startup.sh,停止执行shutdown.sh,查看运行状态执行status.sh,查看主题信息执行info.sh,清除zk相关信息执行zkclear.sh。

4 目录

umq/conf 配置
umq/data 数据存储
umq/logs 日志
umq/lib 依赖jar


生产者

生产者为单例,必须最少执行一次connect操作,连接成功后不会重复connect。

String cfg = "file:/gitlib/uncode-mq/conf/config.properties";
Producer.getInstance().connect(cfg);
for(int i=0;i<10000;i++){
    List<Topic> list = new ArrayList<Topic>();
    Topic topic = new Topic();
    topic.setTopic("umq");
    topic.addContent("umq作者juny=>"+i);
    list.add(topic);
    Producer.getInstance().send(list);
}

或

Properties config = new Properties();
config.setProperty("mq.port", "9000");
config.setProperty("mq.zk.connect", "192.168.1.14:2181");
config.setProperty("mq.enable.zookeeper", "true");
ServerConfig serverConfig = new ServerConfig(config);
Producer.getInstance().connect(serverConfig);
for(int i=0;i<10000;i++){
    List<Topic> list = new ArrayList<Topic>();
    Topic topic = new Topic();
    topic.setTopic("umq");
    topic.addContent("umq作者juny=>"+i);
    list.add(topic);
    Producer.getInstance().send(list);
}

消费者

1 普通方式

String cfg = "file:/gitlib/uncode-mq/conf/config.properties";
Consumer.runningConsumerRunnable(cfg);
Consumer.addSubscriber(new ConsumerSubscriber(){

    //订阅主题
    @Override
    public List<String> subscribeToTopic() {
        List<String> tps = new ArrayList<String>();
        tps.add("umq");
        return tps;
    }

    //通知
    @Override
    public void notify(Topic topic) {
        System.err.println("consumer subscriber:"+topic.toString());
    }

});

2 与spring集成

@Service
public class MyConsumerSubscriber implements ConsumerSubscriber {

    public static final String CFG = "file:/gitlib/uncode-mq/conf/config.properties";

    @Autowired
    LogService logServiceImpl;

    public ExpressRecordConsumerSubscriber() {
        //注册订阅者
        try {
            Consumer.runningConsumerRunnable(CFG);
            Consumer.addSubscriber(this);
        } catch (ConnectException e) {
            e.printStackTrace();
        }
    }

    //订阅主题
    @Override
    public List<String> subscribeToTopic() {
        List<String> tps = new ArrayList<String>();
        tps.add("umq");
        return tps;
    }

    @Override
    public void notify(Topic topic) {
        //处理逻辑
    }

}

转载于:https://my.oschina.net/uncode/blog/726719

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
report 是一个开源的访问层中间件,基于java平台,依赖于spring,以Mozilla Public License 2.0 协议发布。适用于目前大部分项目的接口测试。以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,剥离了请求控制层前的一系列操作,极大的提高项目开发速度,降低学习开发的成本。report项目请求通道采用责任链模式设计,扩展性极强,流程完全可控! ankang-report report 是一个开源的访问层框架,基于java平台,依赖于spring,以Mozilla Public License 2.0 协议发布。可用于接口的调试及性能的展示,以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,剥离的请求前的一系列操作,耦合性低,report是请求通道采用责任链模式设计,轻便可控、扩展性强。report的测试统计等功能为你的每一个接口展示一份完美的报告。 report的关键特性: a)让所有接口可视化,易于控制开发、并行开发 b)为每一个接口提供测试统计以及报表展示 c)简化spring mvc繁琐配置 d)report请求通道采用职责链的模式,扩展性强,完全可控 e)支持多种数据请求方式并可扩展,默认可选json,xml方式 report使用方式: a)maven项目加入report依赖,普通项目则导入jar包 b)引入spring文件 spring/ankang-report.xml,web.xml依赖springMVC配置 c)继承ReportStart类, @Component//通过spring注入 可设置为单例 public class BusinessReportConfig extends ReportStart { @Override protected void reginsterReport() { //注册需要被请求的控制层类 reginster(OrderHandler.class); } @Override protected void reginsterResolver() { // 注册自定义的解析器 没有自定义可忽略 reginster(OrderHandler.class); } } d)启动项目,访问localhost:8080/项目名/report/console report可配置项 a)自定义配置文件需采用指定资源地址:report/report-config.properties b)REPORT_SWITCH:true 则开启,反之关闭 默认开启 c)FILETER:自定义过滤器,多个以逗号隔开 d)JSON_BOAY:json数据请求方式key名称,默认为body e)XML_BODY:xml数据请求方式key名称,默认为root f)MONITOR_FILE_PATH:统计数据保存地址 默认为/report/report.cc g)END_INVOKE:请求通道链终端类。 系统默认 <!--如果不是采用report返回体,则必须配置以下几项,否则影响统计结果--> h)IS_DEFINED_RESPONSE:是否自定义返回体结构 i)RESPONSE_CODE:自定义返回体请求状态码字段名 j)RESPONSE_MESSAGE:自定义返回体请求消息字段名 k)RESPONSE_RESULT:自定义返回体数据对象字段名 l)ENCODE:参数编码格式 m)ERROR400_PAGE_PATH:400时返回页面地址 n)ERROR500_PAGE_PATH:500时返回页面地址 o)ERROR401_PAGE_PATH:401时返回页面地址 report注解解释 a)@Alias:标注在需要被请求的类,value属性值为请求时使用的服务名,没有标注的report将不予以处理 b)@HTTP:标注在需要被请求的方法上,value属性值为请求时的方法名,supportMethod属性值为请求类型,默认支持get和post两种,兼容RquestMapping c)@ReportParam:标注在需要注入方法的参数上,继承至ReportRequest的参数体不需要标注,HttpServletRequest不需要标注,兼容RequestParam d)@Activate:标注在自定义的过滤器上,order属性值为排序值,取值范围int,如有重复则顺延 注:自定义解析器扩展,过滤器扩展等等参照源码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值