Windows10下RocketMQ安装和使用
windows10 环境下安装RocketMQ远没有linux系统下来的方便,但是对于初学者来说,在windows环境下编码和测试还是很重要的。本文主要介绍Windows10下RocketMQ安装和简单使用。
1. 下载RocketMq
1.1 进入 Rocketmq官网[http://rocketmq.apache.org/docs/quick-start/],下载Release版本(http://rocketmq.apache.org/docs/quick-start/)
1.2 选择一个连接下载,并进行解压。
2. 配置环境变量
进入此电脑属性->高级系统设置->环境变量
添加两个系统环境变量:
ROCKETMQ_HOME=“D:\rocketmq”
NAMESRV_ADDR="localhost:9876"
并重启电脑
3. 配置并运行
3.1 打开CMD并进入rocketmq的/bin目录并分别运行:
start mqnamesrv.cmd
start mqbroker.cmd
3.2 分别启动namesrv和broker
4. 创建topic
RocketMq的运行需要依赖于topic,我们一般使用命令创建Topic,运行以下命令创建名为status的topic
:
mqadmin updateTopic -n localhost:9876 -t status -c DefaultCluster
5. 使用spring-boot进行操作
5.1 添加Maven依赖,声明变量
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
mq:
nameserver:
addr: 127.0.0.1:9876
topic: status
5.2 编写producer类
@Component
public class MqProducer {
@Value("${mq.nameserver.addr}")
private String host;
@Value("${mq.topic}")
private String topic;
private DefaultMQProducer producer;
@PostConstruct
public void init() throws MQClientException {
producer = new DefaultMQProducer("producer_group");
producer.setNamesrvAddr(host);
producer.start();
}
/**
* 异步更改任务状态消息
* @param missionId
* @param status
* @return
*/
public boolean SendChangeMissionStatus(Integer missionId,Byte status) {
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put("missionId",missionId);
bodyMap.put("status",status);
Message message = new Message(topic,"ChangeMissionStatus", JSON.toJSON(bodyMap).toString().getBytes(Charset.forName("UTF-8")));
try {
producer.send(message);
} catch (MQClientException e) {
e.printStackTrace();
return false;
} catch (RemotingException e) {
e.printStackTrace();
return false;
} catch (MQBrokerException e) {
e.printStackTrace();
return false;
} catch (InterruptedException e) {
e.printStackTrace();
return false;
}
return true;
}
}
5.3 编写consumer类
@Component
public class MqConsumer {
@Value("${mq.nameserver.addr}")
private String host;
@Value("${mq.topic}")
private String topic;
private DefaultMQPushConsumer consumer;
@Autowired
MissionDOMapper missionDOMapper;
@PostConstruct
public void init() throws MQClientException {
consumer = new DefaultMQPushConsumer("status_group");
consumer.setNamesrvAddr(host);
consumer.subscribe(topic,"*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
Message msg = list.get(0);
try{
Map<String , Object> bodyMap =JSON.parseObject(new String(msg.getBody()),Map.class);
Integer missionId = (Integer) bodyMap.get("missionId");
Byte status = ((Integer) bodyMap.get("status")).byteValue();
missionDOMapper.updateStatusByPrimaryKey(status,missionId);
}catch (Exception e){
e.printStackTrace();
throw e;
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
}
}
最后
本文展示了Windows10下RocketMQ安装和使用,用作记录和学习,欢迎交流和评论!