RocketMQ入门(安装 + HelloWorld)
一、RocketMQ的windows安装#
1. 下载安装RocketMQ
[下载RocketMQ](Apache RocketMQ)
如下图:选择当前最新版本4.8
下载后解压缩
2. RecketMQ的配置
1)配置系统变量ROCKETMQ_HOME
如下图所示,值为你解压缩的目录。注意:目录不要出现中文
2) 修改默认配置
1、进入bin目录,打开runserver.cmd和runbroker.cmd文件,分别做如下修改:
2、新建start.bat文件,内容如下:
start mqnamesrv.cmd
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
3、双击新创建的start.bat,出现如下弹窗表明RocketMQ启动成功。【这两个弹窗在是使用RocketMQ中不能关闭】
二、RocketMQ的可视化界面#
从Github上拉取rocketmq-externals代码,找到rocketmq-console,添加为maven项目,解决项目依赖问题,打开配置文件,做如下修改
然后启动项目,访问http://localhost:8888/,得到如下界面即配置成功。
三、RocketMQ之HelloWorld#
1. Java单项目的HelloWorld
Maven项目引入jar包,非Maven项目直接导入jar就行:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
RocketMQ之消息提供者(这里给出使用的类,别导错报了):
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
public class MsgProducer {
public static void main(String[] args) throws Exception {
// 1. 创建消息生产者
DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");
// 2. 设置NameServer
producer.setNamesrvAddr("127.0.0.1:9876");;
// 3. 启动生产者
producer.start();
// 4. 构建消息对象
Message message = new Message(
// 主题
"myTopic",
// 标签
"myTag",
// 消息体
("Hello RocketMQ").getBytes());
// 5. 发送消息
SendResult send = producer.send(message, 6000);
System.out.println(send);
// 6. 关闭生产者
producer.shutdown();
}
}
运行,访问RocketMq-console-ng,可以看的我们已经发送了一条消息,如下
RocketMQ之消息消费者:
import lombok.extern.slf4j.Slf4j;
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.common.message.MessageExt;
import java.util.List;
@Slf4j
public class MsgConsumer {
public static void main(String[] args) throws Exception {
// 1. 创建消息消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myconsumer-group");
// 2. 设置NameServer
consumer.setNamesrvAddr("127.0.0.1:9876");
// 3. 指定订阅的主题和标签
consumer.subscribe("myTopic", "*");
// 4. 回调函数,创建消息监听器,监听消息队列中的消息
consumer.registerMessageListener((List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) -> {
log.info("Message=>{}",new String(list.get(0).getBody()));
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
// 5. 启动消费者
consumer.start();
}
}
控制台打印输出:
回到我们可视化界面的消息详情,如下,可以看的这条消息已经被消费了
到这里一个简单的消息流程就完成了。
2. 修改默认配置的原因
-
第一二步修改默认配置的内存大小,这个就不多说
-
第三步修改user.home的值,我们打开我们设置的目录,可以看到,多了两个目录:logs和store,注意一下文件大小,logs还好几十M,store就有点恐怖了啊,2G多。最初我就没修改,这些文件放在C盘用户下,直接让我C盘红了,所有我就给他换了一个目录。
这两个改动视个人情况来决定是否修改,这里补上store的容量大小:
3. SpringBoot继承RocketMQ
RocketMQ Producer的SpringBoot项目
加入依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
配置也很简单,除了端口就是一个ServerName和producer group:
server:
port: 5019
rocketmq:
name-server: 127.0.0.1:9876
producer:
group: porducer-omaster
写一个生产消息接口,这个Order就是用来封装消息的,也可以使用Map:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
private Integer id;
private String buyerName;
private String buyerTel;
private String address;
private Date caeateDate;
}
@RestController
public class ProviderController {
@Autowired
private RocketMQTemplate rocketMQTemplate;
@GetMapping("/sendMsg")
public Order sendMsg() {
Order order = new Order(1, "阿松大", "123123", "软件园", new Date());
rocketMQTemplate.convertAndSend("orderTopic", order);
return order;
}
}
启动项目,就会在页面发现这条未被消费的消息。
RocketMQ Consumer的SpringBoot项目
依赖和配置文件相同,只需一个消费消息的方法:
@Slf4j
@Service
@RocketMQMessageListener(consumerGroup = "myConsumerGroup", topic = "orderTopic")
public class ConsumerService implements RocketMQListener<Order> {
@Override
public void onMessage(Order order) {
log.info("新订单{},发短信", order);
// 如果能拿到新的订单,就根据订单ID生成一个减库存的操作,总而言之一句话,操作数据库
System.out.println("执行减库存的操作、、、、");
}
}
作者:Snow Walker
出处:https://www.cnblogs.com/txzob/p/14786258.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!