【 RocketMQ —— 05 延迟消息】

1. 生产延迟消息

生产延迟消息时,需要设置消息的延迟级别。RocketMQ默认提供18个延迟级别,每个级别对应不同的延迟时间:

延迟级别延迟时间
11s
25s
310s
430s
51m
62m
73m
84m
95m
106m
117m
128m
139m
1410m
1520m
1630m
171h
182h

生产者代码

import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RocketMQDelayProducer {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    public void sendDelayMessage(String topic, String message, int delayLevel) {
        rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(message).build(), 3000, delayLevel);
    }
}

在这个例子中,delayLevel参数指定了消息的延迟级别。

2. 消费延迟消息

消费延迟消息与普通消息没有区别。消费者代码如下:

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;

@Service
@RocketMQMessageListener(topic = "your-topic", consumerGroup = "your-consumer-group")
public class DelayConsumer implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        System.out.println("Delay Consumer received: " + message);
        // Process the message
    }
}

注意事项

  1. 延迟级别:RocketMQ只支持预定义的延迟级别,无法自定义任意延迟时间。
  2. 消息重试:延迟消息在重试机制中也会遵循延迟级别进行重试。
阿里云RocketMQ是一种分布式消息中间件,它支持发布/订阅模型,常用于大规模、高并发的消息处理场景。关于发送延迟消息RocketMQ提供了一种特殊模式——顺序消息(Order Message),可以满足需要消息按序到达消费者的需求,包括延时送达。 以下是使用Java SDK发送延迟消息的一个简单示例: ```java import com.alipay.cloud.smgk.Client; import com.alipay.cloud.smgk.message.Message; public class DelayMessageDemo { public static void main(String[] args) { // 创建客户端实例 Client client = new Client("your-access-key-id", "your-access-key-secret", "your-endpoint"); try { // 发送延迟消息 Message message = new Message( "queueName", // 消息队列名 "tag", // 分区标签 "delayKey", // 延迟键,用于控制消息何时投递 "your-delay-time-in-second", // 指定的延迟时间(单位秒) "delayMessageBody" // 消息内容 ); // 设置生产者属性,如序列化方式等 message.setProducerGroup("producer-group"); message.setSerializerClassName("com.alibaba.rocketmq.common.serializer.StringSerializer"); // 发送延迟消息 client.sendMessage(message); System.out.println("延迟消息已成功发送到RocketMQ"); } catch (Exception e) { e.printStackTrace(); } finally { client.shutdown(); } } } ``` 在这个例子中,你需要替换`your-access-key-id`、`your-access-key-secret`和`your-endpoint`为你实际的访问密钥、访问密钥秘密以及服务地址。同时,记得设置合适的延迟时间和序列化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值