一、下载RocketMQ
rocketmq.apache.org/zh/download 下载二进制版本并解压
二、启动NameServer
在启动之前,可以修改下启动配置参数
vi bin/runserver.sh
修改jvm参数
-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=50m
使用一下命令启动
nohup sh bin/mqnamesrv &
三、启动broker
在启动之前同样可以修改启动配置
vi bin/runbroker.sh
修改jvm参数 -server -Xms1g -Xmx1g -Xmn512m
修改conf配置文件
vi conf/broker.conf
在末尾添加nameserver地址
namesrvAddr = localhost:9876
启动命令
nohup sh bin/mqbroker -c conf/broker.conf &
四、搭建可视化工作台
前往官网下载源码
https://rocketmq.apache.org/zh/download
使用maven打包
$ mvn clean package -Dmaven.test.skip=true
启动服务
nohup java -jar -server -Xms256m -Xmx256m -Drocketmq.config.namesrvAddr=127.0.0.1:9876 -Dserver.port=8088 rocketmq-dashboard-2.0.0.jar &
启动成功后输入localhost:8080就可以访问了控制台了
五、代码测试
引入依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>5.1.0</version>
</dependency>
注册生产者
@Configuration
public class DefaultProducerConfig {
@Resource
RocketMQProperties rocketMQProperties;
@Bean
public DefaultMQProducer mqProducer() throws MQClientException {
DefaultMQProducer producer = new DefaultMQProducer("default_producer_group");
producer.setNamesrvAddr(rocketMQProperties.getNameServer());
producer.start();
return producer;
}
}
注册消费者
@Component
public class MqManualRegisterConsumer implements MessageListenerConcurrently {
@Resource
private RocketMQProperties rocketMQProperties;
@PostConstruct
public void init() throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("defaultMqConsumer");
consumer.setNamesrvAddr(rocketMQProperties.getNameServer());
consumer.subscribe("DEFAULT_TOPIC", "*");
consumer.registerMessageListener(this);
consumer.start();
}
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
list.forEach(msg ->{
byte[] msgBody = msg.getBody();
Object message = JSONObject.parse(msgBody);
System.out.println("消费消息:"+message);
});
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
}