安装Maven

安装步骤:《Maven的安装、配置及使用入门》

  http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html

  http://maven.apache.org/download.cgi (apache-maven-3.3.3-bin.zip)

  Path环境变量,当我们在cmd中输入命令时,Windows首先会在当前目录中寻找可执行文件或脚本,如果没有找到,Windows会接着遍历环境变量Path中定义的路径。由于我们将%M2_HOME%\bin添加到了Path中,而这里%M2_HOME%实际上是引用了我们前面定义的另一个变量,其值是Maven的安装目录。因此,Windows会在执行命令时搜索目录D:\bin\apache-maven-3.0\bin,而mvn执行脚本的位置就是这里。

安装RocketMQ

源码地址:(2015-07-18 3.2.6版本)

  E:\RocketMQ\RocketMQ-master

  E:\RocketMQ\RocketMQ_Workspace

  E:\RocketMQ\RocketMQ-master\target\alibaba-rocketmq-3.2.6-alibaba-rocketmq\alibaba-rocketmq\bin

执行下边的命令或者执行install.bat(在这个bat文件中的命令如下)对maven熟悉的一眼就知道是执行clean package install assembly等操作。

  mvn -Dmaven.test.skip=true clean packageinstall assembly:assembly –U

将RocketMQ-master导入到eclipse中

    

  进入刚生成的target文件夹下的bin目录,在命令行中执行:start mqnamesrv.exe,会弹出一个信息窗口,显示The name Server boot success 说明启动成功了,接着启动borker,在命令行中执行:start mqbroker.exe -n 127.0.0.1:9876 同样的弹出一个窗口,看到success表示成功了。

  start mqnamesrv >E:\RocketMQ\logs\alibaba-rocketmq/mqnamesrv.log

【遇到问题】无法启动mqnamesrv。显示软件不兼容。

  

【如何在windows下使用linux的shell脚本】
  http://www.cygwin.com/。

  E:\cygwin64。

【当前目录调出CMD】

  在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)”也可以打开命令行。

生产者

 public class Producer{
public static void main(String[] args) throws MQClientException,InterruptedException{
//一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例
final DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setNamesevAddr("127.0.0.1:9876");
producer.setInstanceName("Producer"); producer.start(); //一个Producer对象可以发送多个topic,多个tag的消息
for(int i=0; i<10; i++){
try{
{
Message msg = new Message("TopicTest1","TagA","OrderID001",("Hello MetaQ").getBytes());
SendResult sendResult = pro .send(msg);
System.out.println(sendResult);
}
{
Message msg = new Message("TopicTest2", "TagB","OrderID0034",("Hello MetaQB").getBytes());
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
{
Message msg = new Message("TopicTest3",// topic
"TagC",// tag
"OrderID061",// key
("Hello MetaQC").getBytes());// body
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
}
}catch(Exception e){
e.printStackTrace();
}
TimeUnit.MILLSECONDS.sleep(1000);
} /**
* 应用退出时,要调用shutdown来清理资源,关闭网络连接,从MetaQ服务器上注销自己
* 注意:我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法
*/
//producer.shutdown();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
producer.shutdown();
}
}));
System.exit(0);
} }

消费者

 public class Consumer {
/**
* 当前例子是PushConsumer用法,使用方式给用户感觉是消息从RocketMQ服务器推到了应用客户端。<br>
* 但是实际PushConsumer内部是使用长轮询Pull方式从MetaQ服务器拉消息,然后再回调用户Listener方法<br>
*/
public static void main(String[] args) throws InterruptedException,
MQClientException{
/**
* 一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例<br>
* 注意:ConsumerGroupName需要由应用来保证唯一
*/
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(
"ConsumerGroupName");
consumer.setNamesrvAddr("127.0.0.1:9876");
consumer.setInstanceName("Consumber"); /**
* 订阅指定topic下tags分别等于TagA或TagC或TagD
*/
consumer.subscribe("TopicTest1","TagA || TagC || TagD");
/**
* 订阅指定topic下所有消息<br>
* 注意:一个consumer对象可以订阅多个topic
*/
consumer.subscribe("TopicTest2","*"); consumer.registerMessageListener(new MessageListenerConcurrently() { public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt>msgs, ConsumeConcurrentlyContext context) { System.out.println(Thread.currentThread().getName()
+" Receive New Messages: " + msgs.size()); MessageExt msg = msgs.get(0);
if(msg.getTopic().equals("TopicTest1")) {
//执行TopicTest1的消费逻辑
if(msg.getTags() != null && msg.getTags().equals("TagA")) {
//执行TagA的消费
System.out.println(new String(msg.getBody()));
}else if (msg.getTags() != null
&&msg.getTags().equals("TagC")) {
//执行TagC的消费
System.out.println(new String(msg.getBody()));
}else if (msg.getTags() != null
&&msg.getTags().equals("TagD")) {
//执行TagD的消费
System.out.println(new String(msg.getBody()));
}
}else if (msg.getTopic().equals("TopicTest2")) {
System.out.println(new String(msg.getBody()));
} return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }
}); /**
* Consumer对象在使用之前必须要调用start初始化,初始化一次即可<br>
*/
consumer.start(); System.out.println("ConsumerStarted.");
}
}

参考文章

l  《RocketMQ在windows上安装和开发使用》http://blog.csdn.net/ruishenh/article/details/22390809

l  《RocketMQ在Windows平台下环境搭建》http://www.cnblogs.com/marcotan/p/4256859.html

l  《RocketMQ随笔分类》http://www.cnblogs.com/marcotan/category/655319.html

《RocketMQ 安装和使用》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. PS导出@3x、@2x、@1x格式的iOS切图神器-Retinize

    Retinize动作下载地址:http://retinize.it/ 使用:ps-载入动作-选中图片-执行动作

  2. MySQL中有关icp mrr和bka的特性

    文辉考我的问题,有关这三个的特性,如果在面试过程中,个人见解可以答以下 icp MyQL数据库会在取出索引的同时,判断是否进行WHERE条件过滤,也就是把WHERE的部分过滤操作放在存储引擎层,在某些 ...

  3. random模块一些常用的东西

    import random#一.随机小数# (1)大于0且小于1之间的小数print(random.random())# (2)大于1且小于9之间的小数print(random.uniform(0,9 ...

  4. Python3.6全栈开发实例[019]

    19.干掉主播.现有如下主播收益信息, 按照要求, 完成相应操作:(1)计算主播平均收益值 sum = 0 for i in zhubo.values(): sum +=i print(round(s ...

  5. 数据库之MySQL(三)

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 临时表搜索 SELECT   *FRO ...

  6. 我的第一个JSP

    首先在新建一个Webproject 再在WebRoot以下new一个HelloWorld.jsp 改动body里面的内容 <body>     <h1>HelloWorld:& ...

  7. (1)虚拟机的安装与使用,linux系统安装

    一.百度下载 VMware workStation 二.新建虚拟机 在这里分为典型和自定义,典型及许多磁盘类型及接口类型为默认,自定义高级则可以都做选择设置. 三.自定义(高级)安装 (1)点击下一步 ...

  8. What's the difference between 'Even if' and 'Even though'?

    为一个英语词组语法写一篇Blog: even if 与 even though 这两个词组大致意思相当,但强调的侧重有所不同. even if与even though的区别: even if一般引导的 ...

  9. Python基础(11)_python模块之time模块、rando模块、hashlib、os模块

    一.模块 1.什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀 模块的本质:模块的本质是一个py文件 2.模块分为三类:1)内置模块:2)第三方模块: ...

  10. 小程序学习第二天 认识框架WXML

    一.初级小程序HelloWorld 心得: (1)progect.config.json :app的个性化设置 (2)一个小程序至少包括两个文件 (2.1)app.json 小程序全局配置       ...