CentOS7 安装 RocketMQ 实践和小示例

1、通过 SSH 工具(比如 XShell)连接到 CentOS7 服务器上;

2、进入到 /usr/local 目录中:
  cd /usr/local

3、下载二进制版的 rocketmq:
  wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-release.zip

4、将下载下来的 rocketmq-all-4.4.0-bin-release.zip 解压:
  unzip rocketmq-all-4.4.0-bin-release.zip
得到
  rocketmq-all-4.4.0-bin-release

5、将 rocketmq-all-4.4.0-bin-release 更名为 rocketmq-all-4.4.0:
  mv rocketmq-all-4.4.0-bin-release rocketmq-all-4.4.0

6、进入到 rocketmq-all-4.4.0 目录中:
  cd rocketmq-all-4.4.0/bin

7、打开【环境配置】文件 profile:
  vim /etc/profile
在文件末尾加入如下配置:
  export ROCKET_MQ_HOME=/usr/local/rocketmq-all-4.4.0
  export NAMESRV_ADDR=localhost:9876
  export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$ROCKET_MQ_HOME/bin:$PATH
  保存并关闭 profile:
  按 ESC,输入 qw! 回车
  使 profile 立即生效:
    source /etc/profile

8、我们先看下 rocketmq 当前的状态:
  ps aux | grep rocketmq

9、在当前目录中创建客户端配置文件 broker.properties:
  sh mqbroker -m > broker.properties

10、修改配置文件 broker.properties,将 brokerIP1 的值改为我们机器的“公网 IP”,这里是关键,并将本次生成此配置文件的时间数据删除:
  namesrvAddr=localhost:9876
  brokerIP1=公网IP
  brokerName=iZ2zehfhto8e2w4t58a282Z
  brokerClusterName=DefaultCluster
  brokerId=0
  autoCreateTopicEnable=true
  autoCreateSubscriptionGroup=true
  msgTraceTopicName=RMQ_SYS_TRACE_TOPIC
  traceTopicEnable=false
  rejectTransactionMessage=false
  fetchNamesrvAddrByAddressServer=false
  transactionTimeOut=6000
  transactionCheckMax=15
  transactionCheckInterval=60000
  aclEnable=false
  storePathRootDir=/root/store
  storePathCommitLog=/root/store/commitlog
  flushIntervalCommitLog=500
  commitIntervalCommitLog=200
  flushCommitLogTimed=false
  deleteWhen=04
  fileReservedTime=72
  maxTransferBytesOnMessageInMemory=262144
  maxTransferCountOnMessageInMemory=32
  maxTransferBytesOnMessageInDisk=65536
  maxTransferCountOnMessageInDisk=8
  accessMessageInMemoryMaxRatio=40
  messageIndexEnable=true
  messageIndexSafe=false
  haMasterAddress=
  brokerRole=ASYNC_MASTER
  flushDiskType=ASYNC_FLUSH
  cleanFileForciblyEnable=true
  transientStorePoolEnable=false

11、创建日志的存放目录(如果目录已存在则忽略):
  mkdir -p /data/log/rocketMQ

12、启动服务端:
  nohup sh mqnamesrv > /data/log/rocketMQ/server.log &

13、启动客户端;

  nohup sh mqbroker -n localhost:9876 -c broker.properties autoCreateTopicEnable=true > /data/log/rocketMQ/client.log &
  注意:这里的地址是 localhost:9876 而非公网 IP。

14、看下 rocketmq 的状态:
  jps
  出现如下则表明服务端和客户端均启动成功:
  2992 Jps
  28282 BrokerStartup
  27484 NamesrvStartup
  也可以通过 ps aux | grep rocketmq 来查看。

15、rocketmq 的配置类:
package com.smbea.rocketMQ;

/**
* rocketMQ 配置
* @author hapday
* @date 2019年5月15日 @time 下午10:47:14
* @since 0.0.1
*
*/
public class RocketMQConfig {

public static final String IP = "10.11.12.13"; // 公网 IP 地址
public static final int PORT = 9876; // 端口,默认端口 9876
public static final String GROUP_NAME = "rocketMQ-group-hapday"; // 组名
public static final String INSTANCE_NAME = "rocketMQ-instance-hapday"; // 实例名
public static final String TOPIC_NAME = "rocketMQ-topic-hapday"; // 主题名
public static final String TAG_NAME = "rocketMQ-tag-hapday"; // 标签名

}

16、数据生产者:
package com.smbea.rocketMQ;

import com.alibaba.rocketmq.client.exception.MQBrokerException;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message;
import com.alibaba.rocketmq.remoting.exception.RemotingException;
import com.artup.common.utils.CommonUtils;

import lombok.extern.slf4j.Slf4j;

/**
* 数据生产者
* @author hapday
* @date 2019年5月15日 @time 下午10:48:13
* @since 0.0.1
*/
@Slf4j
public class RocketMQProducer {

public static void main(String[] args) {
DefaultMQProducer producer = new DefaultMQProducer(RocketMQConfig.GROUP_NAME);
producer.setNamesrvAddr(RocketMQConfig.IP + ":" + RocketMQConfig.PORT);
producer.setInstanceName(RocketMQConfig.INSTANCE_NAME);
producer.setVipChannelEnabled(false); // 关闭 VIP 通道

try {
producer.start(); // 启动【生产者】
} catch (MQClientException e) {
log.error("", e);
}

Message message = new Message();
message.setTopic(RocketMQConfig.TOPIC_NAME);
message.setTags(RocketMQConfig.TAG_NAME);

SendResult sendResult = null;
String content = CommonUtils.getCurrentDateAndTime().concat(" 大家好!我是消息队列 RocketMQ - "); // 消息的内容

for (int index = 0; index < 10; index++) {
message.setBody( content.concat(String.valueOf(index)).getBytes() );

try {
sendResult = producer.send(message); // 发送消息
} catch (MQClientException e) {
log.error("", e);
} catch (RemotingException e) {
log.error("", e);
} catch (MQBrokerException e) {
log.error("", e);
} catch (InterruptedException e) {
log.error("", e);
}

log.debug("响应结果:{}", sendResult);
}

producer.shutdown(); // 关闭【生产者】
}

}

17、数据消费者:
package com.smbea.rocketMQ;

import java.util.List;

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.common.message.MessageExt;

import lombok.extern.slf4j.Slf4j;

/**
* 数据消费者
* @author hapday
* @date 2019年5月15日 @time 下午10:48:32
* @since 0.0.1
*
*/
@Slf4j
public class RocketMQConsumer {

public static void main(String[] args) {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(RocketMQConfig.GROUP_NAME);
consumer.setNamesrvAddr(RocketMQConfig.IP + ":" + RocketMQConfig.PORT);
consumer.setInstanceName(RocketMQConfig.INSTANCE_NAME);
consumer.setVipChannelEnabled(false); // 关闭 VIP 通道

try {
consumer.subscribe(RocketMQConfig.TOPIC_NAME, RocketMQConfig.TAG_NAME); // 订阅
} catch (MQClientException e) {
log.error("", e);
}

consumer.registerMessageListener(new MessageListenerConcurrently() {

@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> messageExtendList, ConsumeConcurrentlyContext context) {
for (MessageExt messageExtend : messageExtendList) {
log.debug("消息内容:{}", new String(messageExtend.getBody()));
}
// log.debug("context = {}", context);

return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}

});

try {
consumer.start(); // 启动【消费者】
} catch (MQClientException e) {
log.error("", e);
}

log.debug("【消费者】已启动。");
}

}

18、关闭服务:
  18.1 关闭 broker 服务: sh mqshutdown broker
  18.2 关闭 namesrv: sh mqshutdown namesrv

CentOS7 安装 RocketMQ 实践和小示例的更多相关文章

  1. Centos7安装RocketMQ及配置测试

    环境 Centos7 RocketMQ 3.2.6 安装位置 /usr/local/alibaba-rockermq 外网ip 182.254.145.66 内网ip 10.105.23.114 安装 ...

  2. Centos7安装完成后一些小优化

    1.修改ip地址.网关.主机名.DNS等 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #网 ...

  3. centos7 安装rocketmq(quick start)

    Quick Start This quick start guide is a detailed instruction of setting up RocketMQ messaging system ...

  4. centos7安装后,一些小优化

    1.设置静态ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 将BOOTPROTO=dhcp修改为BOOTPROTO=static ONBOOT=no ...

  5. CentOS7安装MariaDB成功的实践

    前言 在自己的VPS的CentOS7安装Oracle的Mysql失败以后,我又开始找CentOS7上面安装MariaDB的方法,于是我找打了这篇文章:http://blog.csdn.net/defa ...

  6. Centos7快速安装RocketMQ

    1. 为什么要用MQ 消息队列是一种"先进先出"的数据结构 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高,容错性就越低.以电商应用为例,用户创建订单后,如果耦合调用库 ...

  7. CentOS7安装配置Bacula yum方法

    参考: https://www.baidu.com/link?url=o2QIy2YZWjsJPAFJuYFhrH3nPvtyRkSe-o5Q_FqFZ5E1EMOsIOmGeKm0HAonwHOw8 ...

  8. CentOS7安装Oracle 11gR2 安装

    概述 Oracle 在Linux和window上的安装不太一样,公司又是Linux系统上的Oracle,实在没辙,研究下Linux下Oracle的使用,oracle默认不支持CentOS系统安装,所以 ...

  9. CentOS7安装mongoDB数据库

    CentOS7安装mongoDB数据库 时间:2015-03-03 16:45来源:blog.csdn.net 作者:进击的木偶 举报 点击:8795次 mongoDB是目前发展比较好的NOSQL数据 ...

随机推荐

  1. Macaca环境搭建(四)----mac系统macaca安装

    一.安装Homebrew 命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...

  2. 线性基求交(2019牛客国庆集训派对day4)

    题意:https://ac.nowcoder.com/acm/contest/1109/C 问你有几个x满足A,B集合都能XOR出x. 思路: 就是线性基求交后,有几个基就是2^几次方. #defin ...

  3. 网站如何接入微信公众号JSAPI支付PHP版

    1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...

  4. 你懂什么是分布式系统吗?Redis分布式锁都不会?

    分布式系统涉及到很多的技术.理论与协议,很多人也说,分布式系统是“入门容易,深入难”,有一些人简历上写着熟悉分布式系统,很多人都是管中窥豹只见一斑. 究竟什么是分布式系统? 分布式系统是由一组通过网络 ...

  5. maven简识

    https://www.cnblogs.com/whgk/p/7112560.html 一:命令行管理maven项目: 创建maven[java]项目: D:\maven\demo>mvn ar ...

  6. Centos7:MyCat安装,配置及使用

    解压缩 使用,默认端口8066 ./mycat start //启动 ./mycat stop //停止 ./mycat restart //重启

  7. Centos7:solr伪集群(SolrCloud)搭建

    JDK,tocmat环境搭建 zookeeper集群安装 解压缩zookeeper的压缩包 创建data目录 复制zoo_sample.cfg为zoo.cfg 修改confg/zoo.cfg中 dat ...

  8. html和css制作百度界面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Lua入门记录

    学习资料 Lua入门和Lua高阶章节 Lua中文文档 阅读笔记,只是记录了知识点和一些注意点,详细的看上面提供的学习资料链接 Lua 基础数据类型 nil(空) boolean(布尔) Lua 中 n ...

  10. mongodb启用auth,使用密码登录

    更新操作: db.users.update({'currentVersion':3},{$set:{'currentVersion':5}}) 首先安装下载(略过) mongod 启动服务,有多重启动 ...