Tüm Ürünler
Search
Belge Merkezi

ApsaraMQ for RocketMQ:Send normal messages in synchronous, asynchronous, or one-way mode

Son Güncelleme:Oct 04, 2026

ApsaraMQ for RocketMQ, normal mesajlar için üç iletim modunu destekler. Uygulamanızın gerektirdiği teslimat garantisi düzeyine göre bir mod seçin:

Mod Davranış En uygun kullanım alanı
Eşzamanlı Üretici, sonraki mesajı göndermeden önce aracıdan onay bekler. Teslimat onayı gerektiren senaryolar
Eşzamansız Üretici mesajı gönderir ve hemen devam eder. Sonuç bir geri arama ile döner. Gecikme süresine duyarlı iş akışları
Tek yönlü Üretici herhangi bir yanıt beklemeden mesaj gönderir. Aralıklı mesaj kaybının kabul edilebilir olduğu yüksek aktarım hızı senaryoları

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

Ortak üretici kurulumu

Üç mod da aynı başlatma mantığını kullanır. Üreticiyi bir kez oluşturun, ardından moda özgü gönderme yöntemini çağırın.

import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.SendCallback;
import com.aliyun.openservices.ons.api.OnExceptionContext;
import com.aliyun.openservices.ons.api.ONSFactory;
import com.aliyun.openservices.ons.api.PropertyKeyConst;

import java.util.Date;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

Properties properties = new Properties();
// Read credentials from environment variables.
properties.put(PropertyKeyConst.AccessKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
properties.put(PropertyKeyConst.SecretKey, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// Send timeout in milliseconds.
properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");
// TCP endpoint. Find this in the TCP Endpoint section of the Instance Details page
// in the ApsaraMQ for RocketMQ console.
properties.put(PropertyKeyConst.NAMESRV_ADDR, "<your-tcp-endpoint>");

Producer producer = ONSFactory.createProducer(properties);
// Call start() once before sending any messages.
producer.start();

Yer tutucuyu gerçek değerinizle değiştirin:

Yer Tutucu Açıklama Örnek
<your-tcp-endpoint> Örneğinizin TCP uç noktası http://MQ_INST_xxxxx.mq-internet.region.aliyuncs.com:80

Mesaj oluşturma

Her gönderme çağrısı bir Message nesnesi gerektirir. Kurucu üç bağımsız değişken alır:

Message msg = new Message(
    "TopicTestMQ",          // Topic -- must be a normal-message topic
    "TagA",                 // Tag -- used by consumers to filter messages
    "Hello MQ".getBytes()   // Body -- binary payload; producer and consumer must
                            // agree on the serialization format
);

// Optional: set a business key for message tracing in the console.
msg.setKey("ORDERID_100");
Normal mesajlar için kullanılan bir konu, işlem veya zamanlanmış mesajlar gibi diğer mesaj türleri için kullanılamaz.

Eşzamanlı iletim

Üretici mesajı gönderir ve aracıdan yanıt gelene kadar bekler. Özel durum oluşmazsa mesaj başarıyla teslim edilmiştir.

Synchronous transmission

Ne zaman kullanılır: E-posta bildirimleri, kayıt uyarıları veya promosyon mesajları gibi teslimat onayı gerektiren senaryolar.

Örnek kod

for (int i = 0; i < 100; i++) {
    Message msg = new Message("TopicTestMQ", "TagA", "Hello MQ".getBytes());
    msg.setKey("ORDERID_" + i);

    try {
        SendResult sendResult = producer.send(msg);
        // A non-null result means the broker accepted the message.
        if (sendResult != null) {
            System.out.println(new Date() + " Send mq message success. Topic is:"
                + msg.getTopic() + " msgId is: " + sendResult.getMessageId());
        }
    } catch (Exception e) {
        // Handle failures: retry or persist the message for later delivery.
        System.out.println(new Date() + " Send mq message failed. Topic is:" + msg.getTopic());
        e.printStackTrace();
    }
}

Eşzamansız iletim

Üretici mesajı gönderir ve hemen döner. Aracı yanıtı, iki yöntemi olan bir SendCallback aracılığıyla iletilir: onSuccess ve onException.

Asynchronous transmission

Ne zaman kullanılır: Çağrı yapan iş parçacığının engellenemeyeceği gecikme süresine duyarlı iş akışları; örneğin, video dönüştürme işi göndermek ve sonucu bir geri aramada işlemek.

Örnek kod

Message msg = new Message("TopicTestMQ", "TagA", "Hello MQ".getBytes());
msg.setKey("ORDERID_100");

producer.sendAsync(msg, new SendCallback() {
    @Override
    public void onSuccess(final SendResult sendResult) {
        System.out.println("send message success. topic=" + sendResult.getTopic()
            + ", msgId=" + sendResult.getMessageId());
    }

    @Override
    public void onException(OnExceptionContext context) {
        // Handle failures: retry or persist the message for later delivery.
        System.out.println("send message failed. topic=" + context.getTopic()
            + ", msgId=" + context.getMessageId());
    }
});

// Block for 3 seconds to wait for the callback. In production, use a
// CountDownLatch or similar mechanism instead of Thread.sleep.
TimeUnit.SECONDS.sleep(3);

Tek yönlü iletim

Üretici mesajı gönderir ve devam eder. Yanıt döndürülmez ve geri arama tetiklenmez. Bu mod, güvenilirlik pahasına en yüksek aktarım hızını sunar; mesaj mikrosaniyeler içinde gönderilebilir.

One-way transmission

Ne zaman kullanılır: Günlük toplama veya ölçüm raporlama gibi aralıklı mesaj kaybının kabul edilebilir olduğu yüksek hacimli senaryolar.

Uyarı

Aracı, tek yönlü modda yanıt göndermez; bu nedenle başarısız mesajlar sessizce kaybolur. Veri kaybı kabul edilemiyorsa bunun yerine eşzamanlı veya eşzamansız iletimi kullanın.

Örnek kod

for (int i = 0; i < 100; i++) {
    Message msg = new Message("TopicTestMQ", "TagA", "Hello MQ".getBytes());
    msg.setKey("ORDERID_" + i);

    // No return value, no callback. Fire and forget.
    producer.sendOneway(msg);
}

Üreticiyi kapatma

Kaynakları serbest bırakmak için uygulamanız çıkmadan önce üreticiyi kapatın.

producer.shutdown();
Üreticinin kapatılması belleği serbest bırakır. Uygulamanız sık sık mesaj gönderiyorsa, üreticiyi her istek için oluşturup yok etmek yerine çalışır durumda tutun.

İletim modlarının karşılaştırılması

Üç mod, üreticinin aracı yanıtını bekleyip beklemediği ve aktarım hızı ile güvenilirlik arasındaki denge açısından farklılık gösterir.

Mod Gönderme yöntemi TPS Aracı yanıtı Güvenilirlik Tipik kullanım durumu
Eşzamanlı producer.send(msg) Yüksek Evet -- üretici, aracı mesajı onaylayana kadar engeller Mesaj kaybı yok Bildirimler, sipariş onayları
Eşzamansız producer.sendAsync(msg, callback) Yüksek Evet -- SendCallback aracılığıyla iletilir Mesaj kaybı yok Video dönüştürme, eşzamansız iş akışları
Tek yönlü producer.sendOneway(msg) En yüksek Hayır -- aracı yanıt vermez, bu nedenle üretici hataları algılayamaz Olası mesaj kaybı Günlük toplama, ölçümler

Sırada ne var