CentOS7 安装 RocketMQ 实践和小示例
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 实践和小示例的更多相关文章
- Centos7安装RocketMQ及配置测试
环境 Centos7 RocketMQ 3.2.6 安装位置 /usr/local/alibaba-rockermq 外网ip 182.254.145.66 内网ip 10.105.23.114 安装 ...
- Centos7安装完成后一些小优化
1.修改ip地址.网关.主机名.DNS等 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #网 ...
- centos7 安装rocketmq(quick start)
Quick Start This quick start guide is a detailed instruction of setting up RocketMQ messaging system ...
- centos7安装后,一些小优化
1.设置静态ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 将BOOTPROTO=dhcp修改为BOOTPROTO=static ONBOOT=no ...
- CentOS7安装MariaDB成功的实践
前言 在自己的VPS的CentOS7安装Oracle的Mysql失败以后,我又开始找CentOS7上面安装MariaDB的方法,于是我找打了这篇文章:http://blog.csdn.net/defa ...
- Centos7快速安装RocketMQ
1. 为什么要用MQ 消息队列是一种"先进先出"的数据结构 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高,容错性就越低.以电商应用为例,用户创建订单后,如果耦合调用库 ...
- CentOS7安装配置Bacula yum方法
参考: https://www.baidu.com/link?url=o2QIy2YZWjsJPAFJuYFhrH3nPvtyRkSe-o5Q_FqFZ5E1EMOsIOmGeKm0HAonwHOw8 ...
- CentOS7安装Oracle 11gR2 安装
概述 Oracle 在Linux和window上的安装不太一样,公司又是Linux系统上的Oracle,实在没辙,研究下Linux下Oracle的使用,oracle默认不支持CentOS系统安装,所以 ...
- CentOS7安装mongoDB数据库
CentOS7安装mongoDB数据库 时间:2015-03-03 16:45来源:blog.csdn.net 作者:进击的木偶 举报 点击:8795次 mongoDB是目前发展比较好的NOSQL数据 ...
随机推荐
- Anaconda Spyder 常用快捷键
Ctrl+1 注释.取消注释 Ctrl+4/5 块注释 / 取消块注释 Ctrl+D 删除一行 Ctrl+L 转到行 Ctrl+G/左键 查找函数定义 F9 运行选中代码 F12 断点 / 取消断点 ...
- makefile中=、:=和+=的区别
经常有人分不清= .:=和+=的区别 这里我总结下做下详细的分析: 首先你得清楚makefile的运行环境,因为我是linux系统,那么我得运行环境是shell 在Linux的shell里,shel ...
- [转帖]socks5 协议简介
socks5 协议简介 http://zhihan.me/network/2017/09/24/socks5-protocol/ 什么是socks5 或许你没听说过socks5,但你一定听说过Shad ...
- 【Python】【demo实验28】【练习实例】【递归函数练习】
原题: 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他说是10岁.请 ...
- mysql数据库设计字符类型及长度
1.数字类型 小数的我就不聊了,因为有小数点的一般都是用字符串保存.关于整数,有几种可以选TINYINT.SMALLINT.MEDIUMINT.INT和BIGINT,分别占1.2.4.8字节.如果无符 ...
- P1003铺地毯
这道题是2011年提高组第一题,在洛谷被评为普及-.看到题目后直接写了一个纯模拟,结果第一次提交全部RE,后将数组开大,随即MLE.然后又去思索其余方法,采用先将每一个地毯的对角线存下来,然后i--看 ...
- 方格取数--状压DP or 网络流
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1565 取不相邻的点是权值最大. 这题可以网络流做,暂时先DP一下,网络流明天学一下~~ #define I ...
- 《深入实践C++模板编程》之三——模板参数类型详解
非类型模板参数 和 模板型模板参数 整数以及枚举类型:指向对象或者函数的指针:对对象或函数的引用:指向对象成员的指针.统称为非类型模板参数. 模板型模板参数,是指模板参数还可以是一个模板. 1.整 ...
- vue.js对列表进行编辑未保存随时变更
1.不要建立在同一vm对象下 2.使用深拷贝$.extend(true, vm.model, obj); 3.开新标签页
- Spark 源码和应用开发环境的构建
引言 Spark 现在无疑是大数据领域最热门的技术之一,读者很容易搜索到介绍如何应用 Spark 技术的文章,但是作为开发人员,在了解了应用的概念之后,更习惯的是打开开发环境,开发一些应用来更深入的学 ...