RocketMq 3.2.6 安装

安装rocketmq需要环境:
1、jdk1.7以上
2、maven
3、阿里云CentOS 64
环境变量如下:
#set for java
JAVA_HOME=/usr/local/jdk1.7.0_79
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
#set for maven
export M2_HOME=/home/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
使配置文件生效
source /etc/profile
RocketMq 3.2.6安装开始(下载的是安装包,不需要再经过maven打包,如果您是下载的源码,需要maven环境下打包)
下载
wget https://github.com/alibaba/RocketMQ/releases/v3.2.6.tar.gz
解压
tar -zxvf v3.2.6.tar.gz -C /home/rockemq-source
修改内存文件,如果你的机器内存够大可以不需要修改
/home/rockemq-source/alibaba-rocketmq/bin/runserver.sh
/home/rockemq-source/alibaba-rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=320m"###Xms启动时内存,Xmx最大内存,Xmn最小内存
检查/etc/sysconfig/network下hostname名 与 /etc/hosts是否相同
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost
NETWORKING_IPV6=no
PEERNTP=no
vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       localhost localhost.localdomain localhost6 localhost6.localdomain6
关闭防火墙或者开启端口9876,10911,10912
1) 重启后生效 
     开启: chkconfig iptables on 
     关闭: chkconfig iptables off 
   2) 即时生效,重启后失效 
     开启: service iptables start 
     关闭: service iptables stop 
启动nameserver
nohup sh mqnamesrv & ##启动mqnamesrv
nohup sh mqbroker -n 39.106.121.73:9876 autoCreateTopicEnable=true & ##启动mqbroker
sh mqadmin updateTopic -b 172.17.189.164:10911 -t TopicTest1 -r 10 -w 10  ##创建队列
sh mqadmin updateBrokerConfig -b 172.17.189.164:10911 -k brokerIP1 -v 39.106.121.73  ##更改broker配置文件,更改ip,使外网可以访问
关闭的命令
sh mqshutdown namesrv
sh mqshutdown broker
查看启动日志
tail -f /home/rockemq-source/alibaba-rocketmq/bin/nohup.out
启动成功如下
The Name Server boot success.
The broker[localhost, 172.17.189.164:10911] boot success. and name server is 127.0.0.1:9876
maven项目
依赖包
        <dependency>
	    <groupId>com.alibaba.rocketmq</groupId>
	    <artifactId>rocketmq-client</artifactId>
	    <version>3.2.6</version>
	</dependency>
	
	<dependency>
	    <groupId>com.alibaba.rocketmq</groupId>
	    <artifactId>rocketmq-common</artifactId>
	    <version>3.2.6</version>
	</dependency>
public class Consumer {
	/** 
     * 当前例子是PushConsumer用法,使用方式给用户感觉是消息从RocketMQ服务器推到了应用客户端。<br> 
     * 但是实际PushConsumer内部是使用长轮询Pull方式从MetaQ服务器拉消息,然后再回调用户Listener方法<br> 
     */ 
	public static void main(String[] args) throws MQClientException {
		/** 
         * 一个应用创建一个Consumer,由应用来维护此对象,可以设置为全局对象或者单例<br> 
         * 注意:ConsumerGroupName需要由应用来保证唯一 
         */  
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(  
                "ConsumerGroupName");  
        consumer.setNamesrvAddr("39.106.121.73: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() {  
   
            /** 
             * 默认msgs里只有一条消息,可以通过设置consumeMessageBatchMaxSize参数来批量接收消息 
             */  
            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的消费  
                    } else if (msg.getTags() != null  
                            && msg.getTags().equals("TagD")) {  
                        // 执行TagD的消费  
                    }  
                } 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("Consumer Started."); 
	}
}

public class Producer {
	
	public static void main(String[] args) throws MQClientException, InterruptedException {
		/** 
         * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br> 
         * 注意:ProducerGroupName需要由应用来保证唯一<br> 
         * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键, 
         * 因为服务器会回查这个Group下的任意一个Producer 
         */  
		
		DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");  
        producer.setNamesrvAddr("39.106.121.73:9876");  
        producer.setInstanceName("Producer");
        
        /** 
         * Producer对象在使用之前必须要调用start初始化,初始化一次即可<br> 
         * 注意:切记不可以在每次发送消息时,都调用start方法 
         */  
        producer.start(); 
        
        
        /** 
         * 下面这段代码表明一个Producer对象可以发送多个topic,多个tag的消息。 
         * 注意:send方法是同步调用,只要不抛异常就标识成功。但是发送成功也可会有多种状态,<br> 
         * 例如消息写入Master成功,但是Slave不成功,这种情况消息属于成功,但是对于个别应用如果对消息可靠性要求极高,<br> 
         * 需要对这种情况做处理。另外,消息可能会存在发送失败的情况,失败重试由应用来处理。 
         */ 
        for (int i = 0; i < 2; i++) {  
            try {  
                {  
                    Message msg = new Message("TopicTest1",// topic  
                            "TagA",// tag  
                            "OrderID001",// key  
                            ("Hello MetaQ").getBytes());// body  
                    SendResult sendResult = producer.send(msg);  
                    System.out.println(sendResult);  
                }  
   
                /*{  
                    Message msg = new Message("TopicTest2",// topic  
                            "TagB",// tag  
                            "OrderID0034",// key  
                            ("Hello MetaQ").getBytes());// body  
                    SendResult sendResult = producer.send(msg);  
                    System.out.println(sendResult);  
                }  
   
                {  
                    Message msg = new Message("TopicTest3",// topic  
                            "TagC",// tag  
                            "OrderID061",// key  
                            ("Hello MetaQ").getBytes());// body  
                    SendResult sendResult = producer.send(msg);  
                    System.out.println(sendResult);  
                }  */
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            TimeUnit.MILLISECONDS.sleep(1000);  
        }  
   
        /** 
         * 应用退出时,要调用shutdown来清理资源,关闭网络连接,从MetaQ服务器上注销自己 
         * 注意:我们建议应用在JBOSS、Tomcat等容器的退出钩子里调用shutdown方法 
         */  
        producer.shutdown();  
        
        
        
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值