MQ 发送定时消息
目前支持的域包括公网、华东1、华北2、华东2、华南1。
定时消息可以做到在指定时间之后才可被消费者消费,用于解决一些消息生产和消费有时间窗口要求的场景,或者通过消息触发定时任务的场景,类似于延迟队列。代码示例如下。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Runtime.InteropServices;
- using ons;
- namespace ons
- {
- class onscsharp
- {
- static void Main(string[] args)
- {
- //producer创建和正常工作的参数,必须输入
- ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
- factoryInfo.setFactoryProperty(factoryInfo.ProducerId, "XXX ");//您在MQ控制台申请的Producer ID
- factoryInfo.setFactoryProperty(factoryInfo.PublishTopics, "XXX");//您在MQ控制台申请的Topic
- factoryInfo.setFactoryProperty(factoryInfo.MsgContent, "XXX");//消息内容
- factoryInfo.setFactoryProperty(factoryInfo.AccessKey, "XXX");//AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
- factoryInfo.setFactoryProperty(factoryInfo.SecretKey,"XXX");//SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
- //创建producer
- ONSFactory onsfactory = new ONSFactory();
- Producer pProducer = onsfactory.getInstance().createProducer(factoryInfo);
- //在发送消息前,必须调用start方法来启动Producer,只需调用一次即可
- pProducer.start();
- Message msg = new Message(
- //Message Topic
- factoryInfo.getPublishTopics(),
- //Message Tag
- "TagA",
- //Message Body
- factoryInfo.getMessageContent()
- );
- // 设置代表消息的业务关键属性,请尽可能全局唯一。
- // 以方便您在无法正常收到消息情况下,可通过MQ Console查询消息并补发。
- // 注意:不设置也不会影响消息正常收发
- msg.setKey("ORDERID_100");
- // deliver time 单位 ms,指定一个时刻,在这个时刻之后才能被消费,这个例子表示3s后才能被消费
- long deliverTime = 获取系统当前时间(ms) + 3000;
- msg.setStartDeliverTime(deliverTime);
- //发送消息,只要不抛出异常,就代表发送成功
- try
- {
- SendResultONS sendResult = pProducer.send(msg);
- }
- catch(ONSClientException e)
- {
- //发送失败处理
- }
- // 在应用退出前,必须销毁Producer对象,否则会导致内存泄露等问题
- pProducer.shutdown();
- }
- }
- }