前言
嗨,大家好,我是希留。
上一篇文章中我们介绍了RocketMQ的相关概念,以及安装部署。消息队列RocketMQ入门实践(一)
今天我们就来具体操作一下,在代码里面如何实现发送消息,消费消息。
1、快速入门
1.1 创建topic
/**
* @author xiliu
* @description
* @date 2022/3/1
*/
public class TopicDemo {
public static void main(String[] args) throws MQClientException{
// 创建一个生产者组
DefaultMQProducer producer = new DefaultMQProducer("xiliu_producer_group");
// 生产者需用通过NameServer获取所有broker的路由信息,多个用分号隔开
producer.setNamesrvAddr("42.194.222.32:9876");
// 启动
producer.start();
// 创建topic key:broker名称 newTopic:topic名称 queueNum:队列数(分区)
producer.createTopic("broker_xiliu", "xiliu_topic", 8);
System.out.println("创建topic成功");
producer.shutdown();
}
}
运行出错:
原因:开发机上访问不到broker的ip地址。
所以,需要指定broker的ip地址。
#修改broker配置文件
vim /conf/broker.conf
brokerIP1=42.194.222.32
namesrvAddr=42.194.222.32:9876
修改完成之后,先关闭启动了的broker,再重新启动。
#关闭命令
sh bin/mqshutdown broker
#重新启动broker,通过 -c 指定配置文件
nohup sh bin/mqbroker -c conf/broker.conf &
运行代码,创建topic成功
1.2 发送消息(同步)
代码示例如下:
public class SyncProducerDemo {
public static void main(String[] args) throws Exception {
DefaultMQProducer producer = new DefaultMQProducer("xiliu_producer_group");
producer.setNamesrvAddr("42.194.222.32:9876");
producer.start();
String msgStr = "用户A发送同步消息给用户B";
/*Message代表一条信息,第一个参数是topic,这是主题
第二个参数是tags,这是可选参数,用于消费端过滤消息
第三个参数是keys,这也是可选参数,如果有多个,用空格隔开。RocketMQ可以根据这些key快速检索到消息,相当于
消息的索引,可以设置为消息的唯一编号(主键)。
第四个参数是body,消息主体*/
Message message = new Message("broker-a","xiliu_tag",msgStr.getBytes(RemotingHelper.DEFAULT_CHARSET));
//SendResult是发送结果的封装,包括消息状态,消息id,选择的队列等等,只要不抛异常,就代表发送成功
SendResult sendResult = producer.send(message, 10000);
System.out.println("消息状态:" + sendResult.getSendStatus());
System.out.println("消息id:" + sendResult.getMsgId());
System.out.println("消息queue:" + sendResult