《RocketMQ 安装和使用》
安装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 安装和使用》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
		
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
 - 利用ssh反向代理以及autossh实现从外网连接内网服务器
		
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
 - 外网访问内网Docker容器
		
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
 - 外网访问内网SpringBoot
		
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
 - 外网访问内网Elasticsearch WEB
		
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
 - 怎样从外网访问内网Rails
		
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
 - 怎样从外网访问内网Memcached数据库
		
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
 - 怎样从外网访问内网CouchDB数据库
		
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
 - 怎样从外网访问内网DB2数据库
		
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
 - 怎样从外网访问内网OpenLDAP数据库
		
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
 
随机推荐
- 让VisualStudio Profiler捕捉执行的sql语句
			
启动Profiler之前设置一下Targets的属性就行,图中有说明.
 - 人工智能-baidu-aip语音识别(语音转文字)
			
做这个之前,需要在电脑上安装FFmpeg工具,将要转的语音格式转为PCM格式.FFmpeg不需要安装,下载后,打开bin文件夹,然后将路径放在系统环境变量里.记住,要关闭所有打开的Pycharm,然后 ...
 - 我的Android进阶之旅------>Android横竖屏切换总结
			
在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横屏一样的画面,这样会有2个问题, * 布局问题,在竖屏 显示的布局 ...
 - vue增删改查
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 《Python 机器学习》笔记(二)
			
机器学习分类算法 本章将介绍最早以算法方式描述的分类机器学习算法:感知器(perceptron)和自适应线性神经元. 人造神经元--早期机器学习概览 MP神经元 生物神经元和MP神经元模型的对应关系如 ...
 - web.xml文件配置说明
			
web.xml作用: web.xml主要用来配置Filter.Listener.Servlet等,当我们去启动一个WEB项目时,容器(jetty.tomcat等)首先会读取项目web.xml配置文件里 ...
 - 0607am抽象类&接口&析构方法&tostring&小知识点
			
/*class ren{ public static $color;//静态 static function () { ren::$color; self::$color;//self只能写在类里面, ...
 - MATLAB画图设置长宽。并高清复制
 - QT 数字图像处理 笔记一
			
1.被有符号整数和无符号整数十足的坑了一上午.我在实现图像旋转的时候先把坐标轴中心平移到图像中心:painter.translate(up_x+temp_w,up_y+temp_h);注意这里面各个数 ...
 - 内核模块编译时怎样绕过insmod时的版本检查
			
1.Uboot:每个arm芯片或者海斯芯片都有各自的uboot. 2.但他们的内核版本可以是一样的,主要是跟各自内核的进行的编译选项有关, 31的内核版本里加了版本检查选项“Kernel type-& ...