日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

發送普通消息(三種方式)

SOFAStack 消息隊列提供三種方式來發送普通消息:同步發送、異步發送和單向(Oneway)發送。本文介紹了每種發送方式的原理、使用場景、示例代碼,以及三種發送方式的對比。

三種發送方式的對比

三者的特點和主要區別如下:

發送方式

發送 TPS

發送結果反饋

可靠性

適用場景

同步發送

不丟失

此種方式應用場景非常廣泛,例如重要通知郵件、報名短信通知、營銷短信系統等。

異步發送

不丟失

異步發送一般用于鏈路耗時較長,對響應時間較為敏感的業務場景,例如用戶視頻上傳后通知啟動轉碼服務,轉碼完成后通知推送轉碼結果等。

單向發送

最快

可能丟失

適用于某些耗時非常短,但對可靠性要求并不高的場景,例如日志收集。

同步發送

原理

同步發送是指消息發送方發出一條消息后,會在收到服務端返回響應之后才發下一條消息的通訊方式。

同步發送

示例代碼

import java.util.Properties;

import com.alipay.sofa.sofamq.client.PropertyKeyConst;

import io.openmessaging.api.OMS;
import io.openmessaging.api.Producer;
import io.openmessaging.api.SendResult;

public class SomeClass {

    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.setProperty(PropertyKeyConst.GROUP_ID, "GID_XXX");
        Producer producer = OMS.builder().driver("sofamq").endpoint("$END_POINT")
            .build().createProducer(properties);
        producer.start();

        String msgBody = "Message Body";
        Message message = new Message("YOUR_TOPIC","$YOUR_TAGS", msgBody.getBytes());
        SendResult sendResult = producer.send(message);
        System.out.println(sendResult);
    }
}

異步發送

原理

異步發送是指發送方發出一條消息后,不等服務端返回響應,接著發送下一條消息的通訊方式。消息隊列的異步發送,需要用戶實現異步發送回調接口(SendCallback)。消息發送方在發送了一條消息后,不需要等待服務端響應即可發送第二條消息。發送方通過回調接口接收服務端響應,并處理響應結果。

異步

示例代碼

import java.util.Properties;

import com.alipay.sofa.sofamq.client.PropertyKeyConst;

import io.openmessaging.api.OMS;
import io.openmessaging.api.OnExceptionContext;
import io.openmessaging.api.Producer;
import io.openmessaging.api.SendCallback;
import io.openmessaging.api.SendResult;

public class SomeClass {

    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.setProperty(PropertyKeyConst.GROUP_ID, "GID_XXX");
        Producer producer = OMS.builder().driver("sofamq").endpoint("$END_POINT")
            .build().createProducer(properties);
        producer.start();

        String msgBody = "Message Body";
        Message message = new Message("YOUR_TOPIC","$YOUR_TAGS", msgBody.getBytes());
        producer.sendAsync(message, new SendCallback() {
                @Override
                public void onSuccess(SendResult sendResult) {
                    System.out.println("send success: " + sendResult);
                }

                @Override
                public void onException(OnExceptionContext context) {
                    System.out.println("send fail: " + context);
                }
            });

    }
}

單向(Oneway)發送

原理

發送方只負責發送消息,不等待服務端返回響應且沒有回調函數觸發,即只發送請求不等待應答。此方式發送消息的過程耗時非常短,一般在微秒級別。

oneway

示例代碼

import java.util.Properties;

import com.alipay.sofa.sofamq.client.PropertyKeyConst;

import io.openmessaging.api.OMS;
import io.openmessaging.api.Producer;

public class SomeClass {

    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.setProperty(PropertyKeyConst.GROUP_ID, "GID_XXX");
        Producer producer = OMS.builder().driver("sofamq").endpoint("$END_POINT")
            .build().createProducer(properties);
        producer.start();

        String msgBody = "Message Body";
        Message message = new Message("YOUR_TOPIC","$YOUR_TAGS", msgBody.getBytes());
        producer.sendOneway(message);

    }
}