开发者社区> 问答> 正文

Java SDK如何进行定时消息收发


定时消息可以做到在指定时间戳之后才可被消费者消费,用于解决一些消息生产和消费有时间窗口要求的场景,或者通过消息触发定时任务的场景。更详细的概念介绍及使用过程中的注意事项请参考文档 定时消息
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.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Properties;
  9. public class ProducerDelayTest {
  10.     public static void main(String[] args) {
  11.         Properties properties = new Properties();
  12.         //您在 MQ 控制台创建的Producer ID
  13.         properties.put(PropertyKeyConst.ProducerId, "XXX");
  14.         // 阿里云身份验证,在阿里云服务器管理控制台创建
  15.         properties.put(PropertyKeyConst.AccessKey, "XXX");
  16.         // 阿里云身份验证,在阿里云服务器管理控制台创建
  17.         properties.put(PropertyKeyConst.SecretKey, "XXX");
  18.         // 设置 TCP 接入域名(此处以公共云生产环境为例)
  19.         properties.put(PropertyKeyConst.ONSAddr,
  20.           "http://onsaddr-internal.aliyun.com:8080/rocketmq/nsaddr4client-internal");
  21.         Producer producer = ONSFactory.createProducer(properties);
  22.         // 在发送消息前,必须调用start方法来启动Producer,只需调用一次即可。
  23.         producer.start();
  24.         Message msg = new Message( //
  25.                 // Message所属的Topic
  26.                 "Topic",
  27.                 // Message Tag 可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在MQ服务器过滤
  28.                 "tag",
  29.                 // Message Body 可以是任何二进制形式的数据, MQ不做任何干预,需要Producer与Consumer协商好一致的序列化和反序列化方式
  30.                 "Hello MQ".getBytes());
  31.         // 设置代表消息的业务关键属性,请尽可能全局唯一
  32.         // 以方便您在无法正常收到消息情况下,可通过MQ控制台查询消息并补发。
  33.         // 注意:不设置也不会影响消息正常收发
  34.         msg.setKey("ORDERID_100");
  35.         /**
  36.          * 定时消息投递,设置投递的具体时间戳,单位毫秒例如2016-03-07 16:21:00投递
  37.         */
  38.         try {
  39.             long timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-03-07 16:21:00").getTime();
  40.             msg.setStartDeliverTime(timeStamp);
  41.             // 发送消息,只要不抛异常就是成功
  42.             SendResult sendResult = producer.send(msg);
  43.             System.out.println("Message Id:" + sendResult.getMessageId());
  44.         }
  45.         catch (ParseException e) {
  46.             e.printStackTrace();
  47.         }
  48.         // 在应用退出前,销毁 Producer 对象
  49.         // 注意:如果不销毁也没有问题
  50.         producer.shutdown();
  51.     }
  52. }

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

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

相关电子书

更多
跨平台的云服务SDK需要什么 立即下载
如何通过 Serverless 提高 Java 微服务治理效 立即下载
一个跨平台的云服务SDK需要什么 立即下载