RocketMQ - 阿里云部署
1、安全组
开启端口9876和10909、10911:
2、下载RocketMQ
http://rocketmq.apache.org/release_notes/release-notes-4.4.0/
环境要求:
Linux 64位操作系统
64bit JDK 1.8+
3、安装RocketMQ
1.上传文件到Linux系统
[root@heima rocketmq]# ls /usr/local/src/
rocketmq-all-4.4.0-bin-release.zip
2 解压到安装目录
[root@heima src]# unzip rocketmq-all-4.4.0-bin-release.zip
[root@heima src]# mv rocketmq-all-4.4.0-bin-release ../rocketmq
4、启动RocketMQ
1切换到安装目录
[root@heima rocketmq]# ls
benchmark bin conf lib LICENSE NOTICE README.md
2 启动NameServer
[root@heima rocketmq]# nohup ./bin/mqnamesrv &
[1] 1467
# 只要进程不报错,就应该是启动成功了,可以查看一下日志
[root@heima rocketmq]# tail -f /root/logs/rocketmqlogs/namesrv.log
3 启动Broker
修改conf文件后执行启动命令:
# 编辑bin/runbroker.sh 和 bin/runserver.sh文件,修改里面
# 把默认的JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# 修改为JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
# [-n :指定namesrv的地址 -c :指定所引用的配置地址]
[root@heima rocketmq]# nohup bin/mqbroker -n localhost:9876 -c ./conf/broker.conf autoCreateTopicEnable=true &
[root@heima rocketmq]# tail -f /root/logs/rocketmqlogs/broker.log
5、 测试RocketMQ
1 测试消息发送
[root@heima rocketmq]# export NAMESRV_ADDR=localhost:9876
[root@heima rocketmq]# bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
2 测试消息接收
[root@heima rocketmq]# export NAMESRV_ADDR=localhost:9876
[root@heima rocketmq]# bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
6、 关闭RocketMQ
[root@heima rocketmq]# bin/mqshutdown broker
[root@heima rocketmq]# bin/mqshutdown namesrv
7、RocketMQ控制台安装
1 下载
# 在git上下载下面的工程 rocketmq-console-1.0.0
https://github.com/apache/rocketmq-externals/releases
2 修改配置文件
# 修改配置文件 rocketmq-console\src\main\resources\application.properties
server.port=7777 #项目启动后的端口号
rocketmq.config.namesrvAddr=39.101.160.246:9876 #nameserv的地址,注意防火墙要开启
9876端口
3 打成jar包,并启动
# 进入控制台项目,将工程打成jar包
mvn clean package -Dmaven.test.skip=true
# 启动控制台
java -jar target/rocketmq-console-ng-1.0.0.jar
4 访问控制台
二、消息发送和接收演示
消息发送步骤:
- 创建消息生产者, 指定生产者所属的组名
- 指定Nameserver地址
- 启动生产者
- 创建消息对象,指定主题、标签和消息体
- 发送消息
- 关闭生产者
package com.timing.coupon;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class RocketMQSendMsgTest {
//发送消息
public static void main(String[] args) throws Exception {
//1.创建消息生产者,并且设置生产组名
DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");
/**
* 配置后解决consumer启动后不消费、No route info of this topic问题
*/
//关闭vip通道;阿里云部署的时候必须设置
producer.setVipChannelEnabled(false);
//2.指定Nameserver地址: 阿里云
producer.setNamesrvAddr("39.101.160.246:9876");
//本地Nameserver地址
// producer.setNamesrvAddr("127.0.0.1:9876");
//3.启动生产者
producer.start();
//4.创建消息对象,指定主题、标签和消息体
Message msg = new Message("myTopic123", "Tag",
("RocketMQ Message").getBytes());
//5. 发送消息
SendResult sendResult = producer.send(msg,10000);
System.out.println(sendResult);
//6. 关闭生产者
producer.shutdown();
}
}
消息接收步骤:
- 创建消息消费者, 指定消费者所属的组名
- 指定Nameserver地址
- 指定消费者订阅的主题和标签
- 设置回调函数,编写处理消息的方法
- 启动消息消费者
package com.timing.coupon;
import com.alibaba.fastjson.JSON;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class RocketMQReceiveMsgTest {
//接受消息
public static void main(String[] args) throws Exception {
//1.创建消费者,并且为其指定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myconsumer-group");
//2.为消费者设置NameServer的地址
consumer.setNamesrvAddr("39.101.160.246:9876");
// consumer.setNamesrvAddr("127.0.0.1:9876");
//3.指定消费者订阅的主题和标签
consumer.subscribe("myTopic123", "*");
//4.设置回调函数,编写处理消息的方法
consumer.registerMessageListener(new MessageListenerConcurrently() {
//处理获取到的消息
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msg, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
//消费逻辑
System.out.println("Message====>"+ msg);
//返回消费者成功状态
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//5. 启动消息消费者
consumer.start();
System.out.println("启动消费者成功....");
}
}
windows下RocketMQ安装部署
https://www.jianshu.com/p/4a275e779afa