すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RocketMQ:スケジュールされたメッセージの送受信

最終更新日:Sep 23, 2024

このトピックでは、CまたはC ++ 用のTCPクライアントSDKを使用してスケジュールされたメッセージを送受信する方法に関するサンプルコードを提供します。

スケジュールされたメッセージは、事前定義のタイムスタンプ後に消費されます。 スケジュールされたメッセージは、メッセージの生成と消費の間に時間ウィンドウが必要なシナリオ、またはスケジュールされたタスクがメッセージを使用してトリガーされるシナリオで使用できます。

スケジュールされたメッセージに使用される用語と、スケジュールされたメッセージを使用するときに必ず実行する必要がある注意事項については、「スケジュールされたメッセージと遅延メッセージ」をご参照ください。

前提条件

開始する前に、次の操作が実行されていることを確認してください。

  • CまたはC ++ 用のSDKがダウンロードされます。 詳細については、「リリースノート」をご参照ください。

  • 環境を整えます。詳細については、「環境準備 (V1.x.x)」をご参照ください。

  • コードで指定するリソースは、ApsaraMQ for RocketMQコンソールで作成されます。 リソースには、インスタンス、トピック、および消費者グループが含まれます。 詳細については、「リソースの作成」 をご参照ください。

  • Alibaba CloudアカウントのAccessKeyペアが取得されます。 詳細については、「AccessKey の作成」をご参照ください。

スケジュールされたメッセージの送信

次のサンプルコードは、TCPクライアントSDK for Javaを使用してスケジュールされたメッセージを送信する方法の例を示しています。

#include "ONSFactory.h"
#include "ONSClientException.h"

#include <windows.h>
using namespace ons;
int main()
{

    // Create the producer and configure the parameters that are required to send messages. 
    ONSFactoryProperty factoryInfo;
    // The ID of the consumer group that you created in the ApsaraMQ for RocketMQ console. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::ProducerId, "XXX");
    // The TCP endpoint. You can obtain the endpoint in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::NAMESRV_ADDR, "XXX");
    // The topic that you created in the ApsaraMQ for RocketMQ console. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::PublishTopics,"XXX" );
    // The message content. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::MsgContent, "XXX");
    // Make sure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are configured. 
    // The AccessKey ID that is used for authentication. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::AccessKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
		// The AccessKey secret that is used for authentication. 
    factoryInfo.setFactoryProperty(ONSFactoryProperty::SecretKey, getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));

    //create producer;
    Producer *pProducer = ONSFactory::getInstance()->createProducer(factoryInfo);

    // Before you send the message, call the start() method only once to start the producer. 
    pProducer->start();

    Message msg(
            //Message Topic
            factoryInfo.getPublishTopics(),
            // The message tag. A message tag is similar to a tag in Gmail and is used by consumers to filter messages on the ApsaraMQ for RocketMQ broker.       
            "TagA",
            // The message body. You cannot leave this parameter empty. ApsaraMQ for RocketMQ does not process message bodies. The producer and consumer must agree on the methods that are used to serialize and deserialize message bodies. 
            factoryInfo.getMessageContent()
    );

    // The message key. The key is the business-specific attribute of a message and must be globally unique whenever possible. 
    // If you cannot receive a message as expected, you can use the key to query the message in the ApsaraMQ for RocketMQ console. 
    // Note: You can send and receive a message even if you do not specify the key. 
    msg.setKey("ORDERID_100");

    // The time after which the broker delivers the message to the consumer. Unit: milliseconds. The message can be consumed only after the specified time elapses. In this example, the message can be consumed after a delay of 3 seconds. 
    long deliverTime = GetTickCount64() + 3000;
    msg.setStartDeliverTime(deliverTime);

    // Send the message. If no exception is thrown, the message is sent.      
    try
    {
        SendResultONS sendResult = pProducer->send(msg);
    }
    catch(ONSClientException & e)
    {
        // Specify the logic to handle exceptions. 
    }

    // Before you exit the application, destroy the producer. Otherwise, issues such as memory leaks occur. 
    pProducer->shutdown();

    return 0;
}
            

スケジュールされたメッセージの購読

スケジュールされたメッセージをサブスクライブするためのサンプルコードは、通常のメッセージをサブスクライブするためのサンプルコードと同じです。 詳細については、『メッセージのサブスクライブ』をご参照ください。