Apache RocketMQ 使用教程
项目介绍
Apache RocketMQ 是一个开源的分布式消息传递和流处理平台,由阿里巴巴集团开发并贡献给 Apache 软件基金会。它旨在为高吞吐量、高可用性、可扩展性和低延迟的消息传递系统提供支持。RocketMQ 主要用于处理在线消息传递服务,如订单处理、实时数据同步和日志收集等。
项目快速启动
环境准备
- JDK 1.8 或更高版本
- Maven 3.0 或更高版本
- Git
下载与安装
-
克隆项目仓库:
git clone https://github.com/apache/rocketmq-site.git
-
进入项目目录:
cd rocketmq-site
-
构建项目:
mvn clean install
启动 NameServer
-
进入
distribution/target
目录:cd distribution/target/rocketmq-4.x.x/rocketmq-4.x.x
-
启动 NameServer:
nohup sh bin/mqnamesrv &
启动 Broker
- 启动 Broker:
nohup sh bin/mqbroker -n localhost:9876 &
发送和接收消息
-
发送消息:
import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.remoting.common.RemotingHelper; public class Producer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("localhost:9876"); producer.start(); for (int i = 0; i < 100; i++) { Message msg = new Message("TopicTest", "TagA", ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)); SendResult sendResult = producer.send(msg); System.out.printf("%s%n", sendResult); } producer.shutdown(); } }
-
接收消息:
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.consumer.ConsumeFromWhere; public class Consumer { public static void main(String[] args) throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name"); consumer.setNamesrvAddr("localhost:9876"); consumer.subscribe("TopicTest", "*"); consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); consumer.start(); System.out.printf("Consumer Started.%n"); } }
应用案例和最佳实践
应用案例
- 订单处理系统:RocketMQ 可以用于处理电商平台的订单消息,确保订单的可靠传递和处理。
- 实时数据同步:在金融行业中,RocketMQ 可以用于实时同步交易数据,保证数据的一致性和实时性。
最佳实践
- 消息顺序性:在需要保证消息顺序的场景中,可以使用 RocketMQ 的顺序消息功能。
- 消息过滤:通过设置消息的 Tag 或使用 SQL92 表达式,可以实现消息的精确过滤。
- 消息可靠性:通过设置消息的重试机制和死信队列,可以提高消息的可靠性。