开发者社区> 问答> 正文

Java SDK 如何进行延时消息收发的?


延时消息用于指定消息发送到MQ服务器端后,延时一段时间才被投递到客户端进行消费(例如3秒后才被消费),适用于解决一些消息生产和消费有时间窗口要求的场景,或者通过消息触发延迟任务的场景,类似于延迟队列。
延时消息的概念介绍及使用过程中的注意事项请参考文档 延时消息
TCP 接入点域名,请 前往查看。
发送消息代码示例

  1. import com.aliyun.openservices.ons.api.Message;
  2. import com.aliyun.openservices.ons.api.ONSFactory;
  3. import com.aliyun.openservices.ons.api.Producer;
  4. import com.aliyun.openservices.ons.api.PropertyKeyConst;
  5. import com.aliyun.openservices.ons.api.SendResult;
  6. import java.util.Properties;
  7. public class ProducerDelayTest {
  8.     public static void main(String[] args) {
  9.         Properties properties = new Properties();
  10.         // 您在控制台创建的 Producer ID
  11.         properties.put(PropertyKeyConst.ProducerId, "XXX");
  12.         // AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
  13.         properties.put(PropertyKeyConst.AccessKey, "XXX");
  14.         // SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
  15.         properties.put(PropertyKeyConst.SecretKey, "XXX");
  16.         // 设置 TCP 接入域名(此处以公共云生产环境为例)
  17.         properties.put(PropertyKeyConst.ONSAddr,
  18.           "http://onsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal");
  19.         Producer producer = ONSFactory.createProducer(properties);
  20.         // 在发送消息前,必须调用 start 方法来启动 Producer,只需调用一次即可。
  21.         producer.start();
  22.         Message msg = new Message( //
  23.                 // 您在控制台创建的Topic
  24.                 "Topic",
  25.                 // Message Tag, 可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在MQ服务器过滤
  26.                 "tag",
  27.                 // Message Body 可以是任何二进制形式的数据, MQ 不做任何干预,需要 Producer 与 Consumer 协商好一致的序列化和反序列化方式
  28.                 "Hello MQ".getBytes());
  29.         // 设置代表消息的业务关键属性,请尽可能全局唯一。
  30.         // 以方便您在无法正常收到消息情况下,可通过 MQ 控制台查询消息并补发。
  31.         // 注意:不设置也不会影响消息正常收发
  32.         msg.setKey("ORDERID_100");
  33.         // 延时时间单位为毫秒(ms),指定一个时刻,在这个时刻之后才能被消费,这个例子表示 3秒 后才能被消费
  34.         long delayTime = 3000;
  35.         msg.setStartDeliverTime(System.currentTimeMillis() + delayTime);
  36.         // 发送消息,只要不抛异常就是成功
  37.         SendResult sendResult = producer.send(msg);
  38.         System.out.println("Message Id:" + sendResult.getMessageId());
  39.         // 在应用退出前,销毁Producer对象<br>
  40.         // 注意:如果不销毁也没有问题
  41.         producer.shutdown();
  42.     }
  43. }

订阅消息代码示例
延时消息订阅与普通消息订阅一致,可前往 订阅消息查看。

展开
收起
猫饭先生 2017-10-26 14:10:21 1845 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载