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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】