环境要求
- Linux 64位操作系统 64bit
- JDK 1.8+
安装RocketMQ
- 下载地址
- 上传文件到linux系统并解压
启动RocketMQ
-
切换到安装目录
[root@heima rocketmq]# ls
benchmark bin conf lib LICENSE NOTICE README.md -
启动NameServer
nohup ./bin/mqnamesrv &
只要进程不报错,就应该是启动成功了,可以查看一下日志
tail -f /root/logs/rocketmqlogs/namesrv.log -
启动Broker
修改系统配置文件 bin/runbroker.sh 和 bin/runserver.sh 的启动大小
JAVA_OPT= ${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g
JAVA_OPT= ${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m修改 conf/broker.conf 文件 在末尾添加 XXXX 为当前服务器ip或者外网ip
namesevAddr = XXXX:9876
brokerIP1 = XXXX指定配置文件和ip地址启动
nohup bin/mqbroker -c conf/broker.conf -n XXXX:9876 &
只要进程不报错,就应该是启动成功了,可以查看一下日志
tail -f /root/logs/rocketmqlogs/broker.log
测试RocketMQ
- 测试消息发送
开启两个服务器界面
界面1 执行:
export NAMESRV_ADDR=localhost:9876
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
如果报错的话,修改 bin/tools.sh 的启动大小
界面2 执行:
export NAMESRV_ADDR=localhost:9876
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
出现数据则测试成功
关闭RocketMQ
bin/mqshutdown broker
bin/mqshutdown namesrv
RocketMQ控制台安装
1.linux 需要开放端口 9876 10909 19911 三个端口
2 下载地址
注:只需要下载其中 rocketmq-connect-console 模块
3. 修改配置文件 rocketmq-console\src\main\resources\application.properties
server.port=7777 #项目启动后的端口号
rocketmq.config.namesrvAddr=192.168.109.131:9876 #nameserv的地址
4. 打成jar包,并启动
# 进入控制台项目,将工程打成jar包
mvn clean package -Dmaven.test.skip=true # 启动控制台
java -jar target/rocketmq-console-ng-1.0.0.jar
5.访问控制台
localhost:7777
Java整合rocketMQ
1. 引入依赖
<!--rocketMq依赖-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
/**
* 生产者
*/
public class RocketMQSendMessageTest{
public static void main(String[] args) throws Exception{
//1.创建消息身缠这,并设置生产组名
DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");
producer.setInstanceName(RunTimeUtil.getRocketMqUniqeInstanceName());
//2.为生产者设置NameServer的地址
producer.setNamesrvAddr("192.168.74.129:9876");
//3.启动生产者
producer.start();
//4.构建消息对象,主要是设置消息的主题,标签,内容
Message message = new Message("myTopic", "myTag", ("Test RocketMq Message").getBytes());
//5.发送消息
SendResult send = producer.send(message, 1000);
System.out.println(send);
//6.关闭生产者
producer.shutdown();
}
}
package com.cjs.order.test;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
/**
* help工具类
*/
public class RunTimeUtil {
private static AtomicInteger index = new AtomicInteger();
public static int getPid() {
String info = getRunTimeInfo();
int pid = (new Random()).nextInt();
int index = info.indexOf("@");
if(index > 0) {
pid = Integer.parseInt(info.substring(0, index));
}
return pid;
}
public static String getRunTimeInfo() {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String info = runtime.getName();
return info;
}
public static String getRocketMqUniqeInstanceName() {
return "pid" + getPid() + "_index" + index.incrementAndGet();
}
}
package com.cjs.order.test;
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.common.message.MessageExt;
import java.util.List;
/**
* 接受,订阅消息
* @author cjs
* @version 1.0
* @date 2020-06-22 16:24
*/
public class RocketMQReceiveMessageTest {
public static void main(String[] args) throws Exception {
//1.创建消费者,并且为其指定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myproducer-group");
//2.为消费者设置nameServer的地址
consumer.setNamesrvAddr("192.168.74.129:9876");
//3.指定消费者订阅的主题和标签
consumer.subscribe("myTopic","*");
//4.设置一个回调函数,并在函数中编写接受到消息之后的处理方式
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
//消费逻辑
System.out.println("Message==>" + list);
//返回消费成功状态
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//5.启动消费者
consumer.start();
}
}