最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性,

目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景

比kafka还是有过之无不及,其实kafka文档很丰富

但RocketMQ网上的文章太少,找不到相关的操作教程

于是研究了下源码 做个单机操作的教程,如果你也对此有兴趣不妨共同研究

下载源码的地址 https://github.com/alibaba/RocketMQ/releases

  • 首选通过在java项目里面Maven依赖方式引用RocketMQ Java SDK

    1. <dependency>
    2. <groupId>com.alibaba.rocketmq</groupId>
    3. <artifactId>rocketmq-client</artifactId>
    4. <version>3.2.6</version>
    5. </dependency>

Downloads

在linux 下用wget 下载源码然后解压出来

在runserver.sh里面可以配置 jvm启动的参数 JAVA_OPT_1="-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"

可以 vi runserver.sh

分别给 mqnamesrv mqbroker play.sh 执行的权限

chmod +x  mqnamersrv

chmod +x  mqbroker

chmod +x  play.sh

下面红线框的这段 命令输入错误了,忽略不用看

通过 nohup sh mqnamesrv& 启动 RocketMq

目前没看到结束的命令,也没找到相关的介绍,

我这里用的 ps -ef|grep rocketmq  查到进程pid

然后kill pid号

或则pkill -9 java [慎用]

用jps -v 查看下java进程的参数

rocketmq启动后监听 9876端口,这里还是在看源码里面看到的,资料实在是太少了

在防火墙配置里面加上 9876端口,设置iptables对外开放

部署Broker

nohup sh mqbroker -n "127.0.0.1:9876" -c ../conf/2m-2s-async/broker-a.properties &

这里ip换成本机的就是单机实例,如果配置主从 这里可以配其他的ip

Master和Slave的配置文件参考conf目录下的配置文件

Master与Slave通过指定相同的brokerName参数来配对,Master的BrokerId必须是0,Slave的BrokerId必须是大于0的数

一个Master下面可以挂载多个Slave,同一Master下的多个Slave通过指定不同的BrokerId来区分

部署一Master一Slave,集群采用异步复制方式:

Master: nohup sh mqbroker -n "192.168.1.23:9876" -c ../conf/2m-2s-async/broker-a.properties &

Slave:   nohup sh mqbroker -n "192.168.1.23:9876" -c ../conf/2m-2s-async/broker-a-s.properties &

  1. package com.pgsqlmybatis.common.rocketmq;/*
  2. ***************************************************************
  3. * 公司名称 :
  4. * 系统名称 :信用管家专业版
  5. * 类 名 称 :Ios渠道idfa统计,推广统计用
  6. * 功能描述 :
  7. * 业务描述 :
  8. * 作 者 名 :@Author Royal
  9. * 开发日期 :2016-05-15
  10. * Created :IntelliJ IDEA
  11. ***************************************************************
  12. * 修改日期 :
  13. * 修 改 者 :
  14. * 修改内容 :
  15. ***************************************************************
  16. */
  17.  
  18. import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
  19. import com.alibaba.rocketmq.client.producer.SendResult;
  20. import com.alibaba.rocketmq.common.message.Message;
  21.  
  22. public class Producer {
  23. public static void main(String[] args) {
  24. DefaultMQProducer producer = new DefaultMQProducer("Producer");
  25. producer.setNamesrvAddr("xxxxxxxxxx:9876");
  26. try {
  27. producer.start();
  28.  
  29. String pushMsg="kafka activeMq rocketMq 消息队列使用1";
  30. Message msg = new Message("PushTopic","push","1",
  31. pushMsg.getBytes("UTF-8"));
  32.  
  33. SendResult result = producer.send(msg);
  34. System.out.println("id:" + result.getMsgId() +
  35. " result:" + result.getSendStatus());
  36.  
  37. String pushMsg2="海量级消息记录单机测试2";
  38. msg = new Message("PushTopic","push","2",pushMsg2.getBytes("UTF-8"));
  39.  
  40. result = producer.send(msg);
  41. System.out.println("id:" + result.getMsgId() +
  42. " result:" + result.getSendStatus());
  43.  
  44. String pushMsg3="海量级消息记录单机测试3";
  45. msg = new Message("PullTopic","pull","1",pushMsg3.getBytes());
  46.  
  47. result = producer.send(msg);
  48. System.out.println("id:" + result.getMsgId() +
  49. " result:" + result.getSendStatus());
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. } finally {
  53. producer.shutdown();
  54. }
  55. }
  56. }

  

启动生成者

启动消费者

  1. package com.pgsqlmybatis.common.rocketmq;/*
  2. ***************************************************************
  3. * 公司名称 :
  4. * 系统名称 :信用管家专业版
  5. * 类 名 称 :Ios渠道idfa统计,推广统计用
  6. * 功能描述 :
  7. * 业务描述 :
  8. * 作 者 名 :@Author Royal
  9. * 开发日期 :2016-05-15
  10. * Created :IntelliJ IDEA
  11. ***************************************************************
  12. * 修改日期 :
  13. * 修 改 者 :
  14. * 修改内容 :
  15. ***************************************************************
  16. */
  17.  
  18. import java.io.UnsupportedEncodingException;
  19. import java.util.List;
  20.  
  21. import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
  22. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
  23. import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
  24. import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
  25. import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere;
  26. import com.alibaba.rocketmq.common.message.Message;
  27. import com.alibaba.rocketmq.common.message.MessageExt;
  28.  
  29. public class Consumer {
  30. public static void main(String[] args){
  31. DefaultMQPushConsumer consumer =
  32. new DefaultMQPushConsumer("PushConsumer");
  33. consumer.setNamesrvAddr("xxxxxxxxxxxx:9876");
  34. try {
  35. consumer.subscribe("PushTopic", "push");
  36. /**
  37. * 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br>
  38. * 如果非第一次启动,那么按照上次消费的位置继续消费
  39. */
  40. consumer.setConsumeFromWhere(
  41. ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
  42. consumer.registerMessageListener(
  43. new MessageListenerConcurrently() {
  44. public ConsumeConcurrentlyStatus consumeMessage(
  45. List<MessageExt> list,
  46. ConsumeConcurrentlyContext Context) {
  47. Message msg = list.get(0);
  48. System.out.println(msg.toString());
  49. String recString= null;
  50. try {
  51. recString = new String(msg.getBody() ,"UTF-8");
  52. } catch (UnsupportedEncodingException e) {
  53. e.printStackTrace();
  54. }
  55. System.out.println(recString);
  56. return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
  57. }
  58. }
  59. );
  60. consumer.start();
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }

  

以上为单机实例配置

如果你遇到什么问题可以私信我,如果觉得此文对你很有帮助,点下赞推荐下额^_^

参考:http://blog.csdn.net/a19881029/article/details/34446629

http://sofar.blog.51cto.com/353572/1540874

http://blog.csdn.net/loongshawn/article/details/51086876

RocketMq最佳实践

《RocketMQ原理简介》

分布式开放消息系统(RocketMQ)的原理与实践

《RocketMQ用户指南》

RocketMq消息队列使用的更多相关文章

  1. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  2. RocketMQ—消息队列入门

    消息队列功能介绍 字面上说的消息队列是数据结构中"先进先出"的一种数据结构,但是如果要求消除单点故障,保证消息传输可靠性,应对大流量的冲击,对消息队列的要求就很高了.现在互联网的& ...

  3. Apache RocketMQ 消息队列部署与可视化界面安装

    一.介绍 Apache RocketMQ是一个分布式.队列模型的消息中间件,具有低延迟.高性能和高可靠.万亿级容量和灵活的可扩展性.核心组件由四部分组成:Name Servers,Brokers,Pr ...

  4. RocketMQ消息队列部署与可视化界面安装

    MQ安装部署 最新版本下载:http://rocketmq.apache.org/release_notes 修改配置 vi conf/broker.conf 添加brokerIP1 brokerIP ...

  5. RocketMQ消息队列安装

    一.官方安装文档 http://rocketmq.apache.org/docs/quick-start/ 下载地址 https://github.com/apache/rocketmq/releas ...

  6. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  7. 消息队列 ---常用的 MQ 中间件

    目前市面上比较常用的 MQ(Message Queue,消息队列)中间件有 RabbitMQ.Kafka.RocketMQ,如果是轻量级的消息队列可以使用 Redis 提供的消息队列,其中 Redis ...

  8. 滴滴出行基于RocketMQ构建企业级消息队列服务的实践

    小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间 ...

  9. 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

随机推荐

  1. 【VB6 学习文档管理系统源码】

    VB6写的一款笔记软件的源码,里面包含有很多窗体控件的使用技巧,比如MSHFlexgrid表格.TreeView的动态加载.Ado的增删改查等. 本软件提供对日常生活.工作中的学习笔记.图文并茂存储以 ...

  2. 使用dynamic来简化反射实现

    dynamic是Framework4.0的新特性,dynamic的出现让C#具有了弱语言类型的特性,编译器在编译的时候,不再对类型进行检查,不会报错,但是运行时如果执行的是不存在的属性或者方法,运行程 ...

  3. Mvc 分页栏扩展方法

    using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...

  4. windows进程中的内存结构(好多API,而且VC最聪明)

    在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识.   接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据.那么这些变量在内存中是如何存放的呢?程序又是如何使用这 ...

  5. 带文字的ImageButton[自定义]

    今天Android项目中遇到一个ImageButton控件上面要显示文字,无奈自定义了一个ImageButton,继承自ImageButton.其实就是override这个控件的onDraw(Canv ...

  6. linux解压cpio.gz类型文件

    1.  gunzip XXX.cpio.gz       –> 得到 XXX.cpio 文件 2.  cpio -idmv <XXX.cpio       –> 得到 XXX 文件夹

  7. ♫【MV*】

    MVC数据(模型) 展现层(视图) 用户交互层(控制器) MV*MVW, MVVM, MVC JavaScript MVC框架PK:Angular.Backbone.CanJS与Ember JavaS ...

  8. 【转】关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

    原文网址:http://www.cnblogs.com/cywin888/p/3263027.html 刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成 ...

  9. 【转】 Android快速开发系列 10个常用工具类 -- 不错

    原文网址:http://blog.csdn.net/lmj623565791/article/details/38965311 转载请标明出处:http://blog.csdn.net/lmj6235 ...

  10. devi into python 笔记(二)元组 变量声明 和列表解析

    元组tuple: 类似list,只是tuple是不可变的list.类似java的String都是不可改变的.注意:tuple没有方法(有待考证),不可以像list那样那个list.pop 或者list ...