学而时习之,不亦说乎!

自己搭建个学习用的RocketMQ总是很麻烦,需要虚拟机环境,网络,需要安装rocketmq,启动。时间久了再去看,又不知道这个虚拟机是干嘛的了。

直接在eclipse中启动,简单省事,用的时候启动,用完关掉就行了。

先看下图,给还没开始的你一点信心。

RocketMQ

  • Apache RocketMQ™ is an open source distributed messaging and streaming data platform.

  • Apache RocketMQ™是一个开源分布式消息和流数据平台

Quick Start(先看看官网的怎么玩的)

This quick start guide is a detailed instruction of setting up RocketMQ messaging system on your local machine to send and receive messages.

这个快速启动指南详细说明了如何在本地机器上设置RocketMQ消息传递系统来发送和接收消息。

Prerequisite

The following softwares are assumed installed:

  1. 64bit OS, Linux/Unix/Mac is recommended;

  2. 64bit JDK 1.8+;

  3. Maven 3.2.x

  4. Git

Download & Build from Release

Click here to download the 4.3.0 source release. Also you could download a binary release from here.

Now execute the following commands to unpack 4.3.0 source release and build the binary artifact.

  > unzip rocketmq-all-4.3.0-source-release.zip
> cd rocketmq-all-4.3.0/
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target/apache-rocketmq

Start Name Server

  > nohup sh bin/mqnamesrv &
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...

Start Broker

  > nohup sh bin/mqbroker -n localhost:9876 &
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...

Send & Receive Messages

Before sending/receiving messages, we need to tell clients the location of name servers. RocketMQ provides multiple ways to achieve this. For simplicity, we use environment variable NAMESRV_ADDR

 > export NAMESRV_ADDR=localhost:9876
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...

> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...

Shutdown Servers

> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK

> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK

Start In STS

参考官网的quick start,实现STS的quick start。以后再也不用去虚拟机找rocketmq了!

导入源码到STS

  1. 安装STS(Spring Tool Suite)或者Eclipse

  2. 下载rocketmqrocketmq-externals源码

  3. 新建rocketmq和rocketmq-externals各自的Java Working Set

  4. 分别导入源码到各自的Java Working Set

  5. 解决报错,ignore或者update

  6. 修改下设置,比如字体什么的

接下来干什么?

要在STS中启动RocketMQ,那么首先分析下官方提供的脚本是怎么启动的。对照官网quick start开始下面的流程。

分析mqnamesrv

  • 位置:rocketmq\distribution\bin\

#!/bin/sh
#[ -z STRING ] “STRING” 的长度为零则为真
# [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
#$ Shell本身的文件名
#$@ 是传给脚本的所有参数列表
if [ -z "$ROCKETMQ_HOME" ] ; then
## resolve links - $ may be a link to maven's home
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done

saveddir=`pwd`

ROCKETMQ_HOME=`dirname "$PRG"`/..

# make it fully qualified
ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`

cd "$saveddir"
fi
#这个if的作用就是没有ROCKETMQ_HOME环境变量的时候,设置一个ROCKETMQ_HOME环境变量。明显我们进来的时候是没有的,通过一系列操作后,ROCKETMQ_HOME就被设置为当前文件所在目录的上层目录,这里就是rocketmq\distribution\bin

export ROCKETMQ_HOME

sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@
#这个shell的目的是在当前目录执行runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@

分析NamesrvStartup

#!/bin/sh
#[ -e FILE ] 如果 FILE 存在则为真
error_exit ()
{
echo "ERROR: $1 !!"
exit
}

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
#这儿是确保找到AVA_HOME,不然就直接报错了
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $)/..
#BASE_DIR就是上一级的bin目录,也就是../bin
export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
#把上级目录下的conf目录,也就是../conf加到CLASSPATH

#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#运行在server模式;堆内存固定为4g,新生代2g,元空间128m,最大元空间320m
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
#使用CMS垃圾收集器;在FULL GC的时候,对年老代的压缩;使用70%后开始CMS收集;降低标记停顿;每兆堆空闲空间中SoftReference的存活时间=;新生代比例:::;新生代使用ParNew
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
#输出虚拟机中GC的详细情况;gc日志地址/dev/shm/rmq_srv_gc.log ;-XX:+PrintGCDetails
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
#禁用吃异常优化
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
#启用大内存分页
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#指定扩展类加载器加载的包路径
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
#开启远程debug
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

$JAVA ${JAVA_OPT} $@

那么我们要干什么呢?

  • 从shell看,我们要设置一个ROCKET_HOME,我们的启动类是org.apache.rocketmq.namesrv.NamesrvStartup

  • private String rocketmqHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY, System.getenv(MixAll.ROCKETMQ_HOME_ENV));

  • ROCKET_HOME主要就是为了找到日志配置文件,那么可以手动指定一下环境

  • 查看日志配置文件,使用到了user.home,那么手动写一个

  • 虚拟机的启动优化,参数,可以在启动的时候加上,也可以不管

修改rocketmq-namesrv项目下的NamesrvStartup.java

    public static void main(String[] args) {
System.setProperty("rocketmq.home.dir", "../distribution");//新增
System.setProperty("user.home", ".");//新增
main0(args);

接下来

Run As ->Java Application

The Name Server boot success. serializeType=JSON

然后用jconsole大致看一下,内存消耗的确不大,但是启动指定几个g是几个意思?

刷新一下,当前目录就可以看到日志了

同样的方法,启动brocker

shell文件大同小异,main方法如下,新增三行代码

rocketmq-brocker项目下的BrokerStartup.java

   public static void main(String[] args) {
System.setProperty("rocketmq.home.dir", "../distribution");//新增
System.setProperty("user.home", ".");//新增
args=new String[]{"-n","localhost:9876"};//新增
start(createBrokerController(args));
}

Run As ->Java Application

启动后刷新当前项目,可以看到日志目录和数据目录

启动控制台

  1. 我们已经导入了rocketmq-externals,找到rocketmq-console-ng项目

  2. 修改aplication.properties:rocketmq.config.namesrvAddr=localhost:9876

  3. 运行App类的main方法:Run As ->Java Application

  4. 访问localhost:8080

  5. 至此,我们一共启动了三个项目,一个nameserver,一个broker,一个console;nameserver类似于zk,broker用于实际消息收发,console用于可视化监控查看。

生产消费消息

找到项目:rocketmq-example

启动生产者

打开org.apache.rocketmq.example.quickstart.Producer类,加上producer.setNamesrvAddr("localhost:9876");

运行

启动消费者

打开org.apache.rocketmq.example.quickstart.Consumer类,加上consumer.setNamesrvAddr("localhost:9876");

运行

RocketMQ学习笔记(一)eclipse版的quickstart的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. RocketMQ学习笔记(15)----RocketMQ的消息模式

    在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...

  3. RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试

    1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...

  4. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  5. RocketMQ学习笔记(14)----RocketMQ的去重策略

    1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...

  6. RocketMQ学习笔记(4)----RocketMQ搭建双Master集群

    前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...

  7. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中

    前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...

  8. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中

    本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...

  9. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中

    工程创建可参考前文: [学习笔记] 在Eclipse中使用Hibernate,并创建第一个工程,数据库为Oracle XE 在工程上鼠标右键: 找到java 选择 Runable JAR file N ...

  10. [学习笔记] 在Eclipse中添加用户库 Add User Libraries ,在项目中引用用户库

    如果还没有安装Eclipse, 则请参考前文:  [学习笔记] 下载.安装.启动 Eclipse(OEPE) 添加用户库 本文主要介绍在项目中直接使用第三方库的情况.就是把第三方的jar文件直接放到某 ...

随机推荐

  1. Tomcat的windows10集群搭建(一台电脑同时运行多个tomcat配置方法)

    配置方法(好久不配置了,忘记了,今天还是总结下吧): 1.官网下载tomcat ,我下载了tomcat6.0和tomcat7.0(以便区分) 官网地址:http://tomcat.apache.org ...

  2. struct 和union的区别

    union ( 共用体):构造数据类型,也叫联合体  用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据 ...

  3. 四则运算生成器(java) 蔡苑菲,陆海燕

    github地址:https://github.com/Nancy0611/Myapp.git 一.项目相关要求 使用 -n 参数控制生成题目的个数,例如 Myapp.exe -n 10 将生成10个 ...

  4. MSP430 G2553 低功耗模式LPMx

    MSP430除了正常运行时的active模式外,还支持五种低功耗模式(Low-power mode),分别为LPM0.LPM1.LPM2.LPM3.LPM4,由状态寄存器中的CPUOFF.OSCOFF ...

  5. 使用Team Explorer Everywhere (TEE) 2015 SDK获取团队项目的签入策略

    TFS的代码签入策略与IDE工具紧密相关,例如Visual Studio中设置的签入策略,只会影响Visual Studio的团队资源管理器:如果需要在Eclipse的TEE中启用签入策略,你还需要在 ...

  6. shell中调用jenkins API批量运行历史任务

    shell中调用jenkins API批量运行jenkins带参数的任务: #!/bin/sh #startdate=20150127 startdate=20150201 while [ " ...

  7. NativeScript的开发体会

    上个月开始,国内的主流技术网站开始在推荐NativeScrpit,"js+xml写跨终端app"."原生体验挡不住",很多网站都拿这个当做宣传NativeScr ...

  8. asp.net 导出 Excel

    /// <summary> /// List 数据导出Excel /// </summary> /// <param name="list">数 ...

  9. aspnetPage分页控件

    项目里面有一个分页,刚好知道了aspnetPage分页控件,现在就把实现步骤和代码贴出来分享一下,如有错误欢迎指正. http://www.webdiyer.com  该控件原网址.里面文档 1.首先 ...

  10. 异步和等待(async和await)

    在.Net 4.5中,通过async和await两个关键字,引入了一种新的基于任务的异步编程模型(TAP).在这种方式下,可以通过类似同步方式编写异步代码,极大简化了异步编程模型.如下式一个简单的实例 ...