Spring中有关于RocketMQ常用的操作类

常见类概述

DefaultMQProducer、TransactionMQProducer、OrderlyMessageProducer、 DefaultMQPushConsumer、DefaultMQPullConsumer、MessageListenerOrderly、 RocketMQTemplate、@RocketMQMessageListener与RocketMQListener

1. DefaultMQProducer (发送普通消息)

DefaultMQProducer 是 RocketMQ 的标准生产者类,用于发送普通消息。

示例代码:
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setNamesrvAddr("localhost:9876"); 
producer.start(); 
try { 
    Message msg = new Message("TopicName", "TagA", "Hello RocketMQ".getBytes());    
    SendResult sendResult = producer.send(msg); 
    System.out.println("Message sent: " + sendResult); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    producer.shutdown(); 
}

2. TransactionMQProducer(发送事务消息)

TransactionMQProducer 是 RocketMQ 的事务生产者类,用于发送事务消息。

示例代码:
TransactionMQProducer producer = new TransactionMQProducer("TransactionProducerGroupName"); 
producer.setNamesrvAddr("localhost:9876"); 
producer.setTransactionListener(new TransactionListener() { 
    @Override 
    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) { 
        // 执行本地事务 
        return LocalTransactionState.COMMIT_MESSAGE; 
    } 
    @Override 
    public LocalTransactionState checkLocalTransaction(MessageExt msg) { 
        // 检查本地事务状态 
        return LocalTransactionState.COMMIT_MESSAGE; 
    } 
}); 
producer.start(); 
try { 
    Message msg = new Message("TopicName", "TagA", "Hello RocketMQ".getBytes()); 
    SendResult sendResult = producer.sendMessageInTransaction(msg, null); 
    System.out.println("Transaction message sent: " + sendResult); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    producer.shutdown(); 
} 

3. OrderlyMessageProducer(发送顺序消息)

OrderlyMessageProducer 是 RocketMQ 的顺序消息生产者类,用于发送顺序消息。

也是用DefaultMQProducer类操作,只不过加了个匿名内部类,通过是实现MessageQueueSelector接口的select方法从而实现发送顺序消息

示例代码:
DefaultMQProducer producer = new DefaultMQProducer("OrderlyProducerGroupName"); 
producer.setNamesrvAddr("localhost:9876"); 
producer.start(); 
try { 
    for (int i = 0; i < 10; i++) { 
        Message msg = new Message("TopicName", "TagA", ("Orderly message " + i).getBytes()); 
        SendResult sendResult = producer.send(msg, new MessageQueueSelector() { 
            @Override 
            public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) { 
                int index = (Integer) arg; 
                return mqs.get(index % mqs.size()); 
            } 
        }, i); 
        System.out.println("Orderly message sent: " + sendResult); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    producer.shutdown(); 
} 

4. DefaultMQPushConsumer (被动接收/消费消息)

DefaultMQPushConsumer 是 RocketMQ 的推送消费者类,用于接收推送的消息。

示例代码:

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroupName"); 
consumer.setNamesrvAddr("localhost:9876"); consumer.subscribe("TopicName", "*"); 
consumer.registerMessageListener(new MessageListenerConcurrently() { 
    @Override 
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { 
        for (MessageExt msg : msgs) { 
            System.out.println("Received message: " + new String(msg.getBody())); 
        } 
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; 
    } 
}); 
consumer.start();

5. DefaultMQPullConsumer (主动拉取/消费消息,已过时。一般用@RocketMQMessageListener替代)

DefaultMQPullConsumer 是 RocketMQ 的拉取消费者类,用于主动拉取消息。

示例代码:
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer("PullConsumerGroupName"); 
consumer.setNamesrvAddr("localhost:9876"); 
consumer.start(); 
Set<MessageQueue> mqs = consumer.fetchSubscribeMessageQueues("TopicName"); 
for (MessageQueue mq : mqs) { 
    PullResult pullResult = consumer.pull(mq, "*", 0, 32); 
    System.out.println(pullResult.getMsgFoundList()); 
} 
consumer.shutdown();

6. MessageListenerOrderly (顺序消费消息)

MessageListenerOrderly 是 RocketMQ 的顺序消息监听器,用于顺序消费消息。

示例代码:
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("OrderlyConsumerGroupName");
consumer.setNamesrvAddr("localhost:9876"); 
consumer.subscribe("TopicName", "*"); 
consumer.registerMessageListener(new MessageListenerOrderly() { 
    @Override 
    public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) { 
        for (MessageExt msg : msgs) { 
            System.out.println("Received orderly message: " + new String(msg.getBody())); 
        } 
        return ConsumeOrderlyStatus.SUCCESS; 
    } 
}); 
consumer.start();

7. RocketMQTemplate (封装了很多消息推送的方法,具体可查看源码)

RocketMQTemplate 是 Spring Boot 提供的模板类,用于简化消息的发送操作。

示例代码:
@Service 
public class MyMessageProducer { 
    @Autowired 
    private RocketMQTemplate rocketMQTemplate; 
    public void sendMessage(String message) { 
        rocketMQTemplate.convertAndSend("TopicName:TagA", message); 
    } 
}

8. @RocketMQMessageListener和RocketMQListener (简化消费者的配置)

@RocketMQMessageListener 是 Spring Boot 提供的注解,用于简化 RocketMQ 消费者的配置。

示例代码:
@Service 
@RocketMQMessageListener( topic = "TopicName", consumerGroup = "ConsumerGroupName", selectorExpression = "TagA || TagB", consumeMode = ConsumeMode.CONCURRENTLY, messageModel = MessageModel.CLUSTERING ) 
public class MyMessageListener implements RocketMQListener<String> { 
    @Override 
    public void onMessage(String message) { 
        System.out.println("Received message: " + message); 
    } 
}

常见组合方式

1. 普通消息生产与消费
  • 生产者DefaultMQProducer
  • 消费者DefaultMQPushConsumer 或 DefaultMQPullConsumer
2. 事务消息生产与消费
  • 生产者TransactionMQProducer
  • 消费者DefaultMQPushConsumer
3. 顺序消息生产与消费
  • 生产者OrderlyMessageProducer
  • 消费者DefaultMQPushConsumer 配合 MessageListenerOrderly
4. 使用 RocketMQTemplate 发送消息
  • 生产者RocketMQTemplate
  • 消费者@RocketMQMessageListener
5. 使用 RocketMQTemplate 发送事务消息
  • 生产者RocketMQTemplate 配合事务消息发送方法
  • 消费者@RocketMQMessageListener
6. 使用 RocketMQTemplate 发送顺序消息
  • 生产者RocketMQTemplate 配合顺序消息发送方法
  • 消费者@RocketMQMessageListener 配合 MessageListenerOrderly

在 Spring Boot 项目中,推荐使用 RocketMQTemplate 和 @RocketMQMessageListener 来简化消息的生产和消费。RocketMQTemplate 提供了更高级的 API,而 @RocketMQMessageListener 简化了消费者的配置。

总结

  • DefaultMQProducer: 用于发送普通消息。
  • TransactionMQProducer: 用于发送事务消息。
  • OrderlyMessageProducer: 用于发送顺序消息。
  • DefaultMQPushConsumer: 用于接收推送的消息。
  • DefaultMQPullConsumer: 用于主动拉取消息。
  • MessageListenerOrderly: 用于顺序消费消息。
  • RocketMQTemplate: 用于简化消息的发送操作。
  • @RocketMQMessageListener: 用于简化 RocketMQ 消费者的配置。

其中@RocketMQMessageListener 和 RocketMQListener 是需要同步使用的,它们通常一起配合使用来实现消息的消费。@RocketMQMessageListener 是一个注解,用于标记一个类为 RocketMQ 的消费者,而 RocketMQListener 是一个接口,需要被消费者类实现,用于定义消息处理逻辑。

注意:

  • 普通消息:适用于简单的消息传递,不需要保证消息的顺序和事务一致性,适合大量消息的快速传递。
  • 事务消息:适用于需要保证消息发送和本地事务一致性的场景,例如订单处理、支付系统、分布式事务等。
  • 顺序消息:适用于需要保证消息顺序的场景,例如订单处理、物流跟踪、金融交易等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值