quick start
添加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.7.1</version>
</dependency>
生产者
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
/**
* 生产者组,简单来说就是多个发送同一类消息的生产者称之为一个生产者组rocketmq支持事务消息,在发送事务消息时,如果事务消息异常(producer挂了),broker端会来回查事务的状态,这个时候会根据group名称来查找对应的producer来执行相应的回查逻辑。相当于实现了producer的高可用
*/
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
// namesrv地址 多个地址用 ; 隔开 从namesrv上拉取broker信息
producer.setNamesrvAddr("localhost:9876");
producer.start();
for (int i = 0; i < 1000; i++) {
try {
/**
* 创建消息实例,指定topic,tag,消息内容。tag
*/
Message msg = new Message("TopicTest" /* Topic */, "TagA" /* Tag */,
("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
// 发送消息并获取发送结果 同步发送
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
Thread.sleep(1000);
}
}
producer.shutdown();
}
}
SendResult中,有一个sendStatus状态,表示消息的发送状态。一共有四种状态
- FLUSH_DISK_TIMEOUT : 表示没有在规定时间内完成刷盘(需要Broker 的刷盘策Ill创立设置成
SYNC_FLUSH 才会报这个错误) 。 - FLUSH_SLAVE_TIMEOUT :表示在主备方式下,并且Broker 被设置成SYNC_MASTER 方式,没有
在设定时间内完成主从同步。 - SLAVE_NOT_AVAILABLE : 这个状态产生的场景和FLUSH_SLAVE_TIMEOUT 类似, 表示在主备方
式下,并且Broker 被设置成SYNC_MASTER ,但是没有找到被配置成Slave 的Broker 。 - SEND OK :表示发送成功,发送成功的具体含义,比如消息是否已经被存储到磁盘?消息是否被
同步到了Slave 上?消息在Slave 上是否被写入磁盘?需要结合所配置的刷盘策略、主从策略来
定。这个状态还可以简单理解为,没有发生上面列出的三个问题状态就是SEND OK
消费者
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
//groupName 将多个consumer分组,提高并发处理能力。需要和MessageModel配合
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
// 多个地址 ;分开 获取broker地址 并定时向broker发送心跳 可以从master/slave获取订阅
consumer.setNamesrvAddr(&#