Bu konu, ApsaraMQ for RocketMQ içindeki LiteTopic tanımını, model ilişkilerini, dahili niteliklerini, davranış kısıtlamalarını, sürüm uyumluluğunu ve kullanım önerilerini açıklar.
Ön koşullar
Lite konular şu anda yalnızca Serverless olmayan örnekler (abonelik ve kullandıkça öde) ile özel Serverless örnekler tarafından desteklenmektedir.
-
Lite konu modelini destekleyen bir örnek satın almak için:
-
Yeni bir örnek satın alırken, satın alma sayfasında
version_capabilityanahtarına velite-topicdeğerine sahip bir ürün yetenek etiketi ekleyin. Mevcut örnekler için, lite konu modelini destekleyen bir sürüme yükseltmek amacıyla bir destek bileti oluşturun. Bileti oluştururken örnek ID'sini ve bölgeyi belirtin.
-
Belirli senaryolarınız için LiteTopic çözümleri hakkında ücretsiz danışmanlık almak üzere bir destek bileti oluşturabilirsiniz.
Tanım
Lite konu, ApsaraMQ for RocketMQ içinde mesaj iletimi ve depolama için kullanılan ikincil bir kapsayıcıdır. Aynı türdeki iş mantığı altında farklı alt sınıflara (örneğin farklı oturumlar, görevler veya diğer granülerlikler) ait mesajları tanımlamak için kullanılır.
Lite konuların temel amaçları şunlardır:
Özel tüketimi etkinleştirmek ve ikinci düzey veri yalıtımı tanımlamak.
Farklı alt kategorilerden gelen verileri ayrı lite konulara ayırarak daha ince granülerlikte depolama ve abonelik yalıtımı sağlamanızı öneririz.
Veri kimliğini ve izinlerini tanımlamak.
Konu tabanlı kimlik ve izin yönetiminin üzerine inşa edilen lite konular, kullanıcı kimliklerinin ve izinlerinin daha da hassaslaştırılmasına olanak tanır.
Model ilişkileri
ApsaraMQ for RocketMQ alan modelinde lite konuların akışı ve konumu aşağıdaki gibidir:

Konu, ApsaraMQ for RocketMQ içinde mesaj iletimi ve depolama için üst düzey kapsayıcıdır. Konu türü Lite olduğunda, altında bir lite konu oluşturabilirsiniz. Konu ve lite konu kombinasyonu, mesaj depolama kapsayıcısını benzersiz şekilde tanımlar.
Konu türü Lite olduğunda, her depolama kapsayıcısı varsayılan olarak bir kuyruğa sahiptir.
Dahili özellikler
Lite konu adı
Tanım: Bir lite konuyu tanımlayan addır. Lite konu adları, üst konuları içinde küresel olarak benzersizdir.
Değer: Konu türü Lite olduğunda ve bir mesajda
setLiteTopicçağrıldığında, sistem lite konu henüz mevcut değilse otomatik olarak oluşturur.Kısıtlama: Bkz. Parametre sınırları.
Yaşam süresi (TTL)
Tanım: Bir lite konu için son kullanma süresidir. Lite konuya TTL süresinden daha uzun süre yeni mesaj yazılmazsa, sistem bunu otomatik olarak siler. Silme işlemi, lite konuya ayrılan kotanın düşülmesi anlamına gelir (toplam kota eksi bir).
Değer: Lite türünde bir konu oluştururken son kullanma parametresini ayarlayabilirsiniz.
Kısıtlama: Bkz. Parametre sınırları.
Sürüm uyumluluğu
Sunucu tarafı sürümü: 5,0-rmq-20251024-1 veya üzeri
İstemci tarafı sürümü: RocketMQ gRPC 5.1.0 veya üzeri
Lite türü ve standart türü konular arasındaki farklar
|
Senaryo |
Karşılaştırma öğesi |
Hafif Konular |
Standart türü konu |
|
Mesaj depolama |
Üst düzey konu |
Aynı. Her ikisi de konu kaynağının önceden oluşturulmasını gerektirir. |
|
|
İkinci düzey konu |
Bir konu altında milyonlarca ikinci düzey LiteTopic kaynağı oluşturabilir ve her biri için yeni yeteneklerden yararlanabilirsiniz. |
İkinci düzey konu kaynağı yoktur. |
|
|
Otomatikleştirilmiş yaşam döngüsü yönetimi |
LiteTopic yaşam döngüsü yönetimi otomatiktir:
|
Yok |
|
|
Sıralama |
Her LiteTopic'in tam olarak bir kuyruğu vardır. Aynı kuyruktaki mesajlar sırayla depolanır.
|
Birden çok kuyruk oluşturulur. Yalnızca bölümlenmiş sıralı konular sıralamayı garanti eder. |
|
|
Gönderme/alma için maksimum eşzamanlı TPS |
Her LiteTopic yalnızca bir kuyruğa sahip olduğu için TPS'si sınırlıdır. Ancak, bir konu altında milyonlarca LiteTopic oluşturabileceğiniz için toplam TPS, LiteTopic sayısıyla ölçeklenir. |
Konu TPS'si, kuyruk sayısına ve küme düğüm sayısına göre yatay olarak ölçeklenir. |
|
|
Mesaj tüketimi |
Abonelik tutarlılığı |
Aynı olmaları gerekmez. Aynı grup içinde her tüketici farklı bir LiteTopic kümesine abone olabilir. Grup düzeyindeki kısıtlamalar gevşetilmiştir. |
Gerekli. Aynı gruptaki tüm tüketiciler, hedef konudan gelen mesajları paylaşmak için aynı abonelikleri korumalıdır. |
|
Sıralama |
Sıralı tüketim: Bir LiteTopic'teki mesajlar yalnızca bir tüketici iş parçacığı tarafından işlenir. |
Eşzamanlı veya sıralı tüketimi destekler. |
|
|
Dinamik abonelik |
Her tüketici, belirli LiteTopic'lere yönelik abonelikleri dinamik olarak ekleyebilir veya kaldırabilir. |
Yok |
|
|
Tek bir tüketicinin abone olabileceği maksimum LiteTopic sayısı |
Her tüketici binlerce LiteTopic'e abone olabilir. |
Yok |
|
|
Gözlemlenebilirlik |
Ölçümler |
Mesaj birikimi ölçümlerini içerir. Mesaj işleme gecikme süresi için kullanılabilir bir ölçüm bulunmamaktadır. |
Mesaj birikimi ölçümlerini içerir. Mesaj İşleme Süresi Ölçümü |
|
Mesaj izleme |
Aynı |
||
Yaygın lite konu kullanım durumları
Kullanım durumu 1: Uzun süren çağrı engellemelerini çözmek için Çoklu Ajan sistemlerinde asenkron iletişim
Yapay zeka senaryoları karmaşıklaştıkça tek ajanlı sistemler yetersiz kalmaktadır: uzmanlık eksikliği, birden çok alanı entegre etmede zorluk ve dinamik iş birliğine dayalı karar verme yeteneğinin olmaması. Tek ajanlı uygulamalar ve iş akışları Çoklu Ajan mimarilerine doğru kaymaktadır. Ancak, yapay zeka görevleri genellikle uzun sürdüğü için senkron çağrılar arayanın iş parçacığını engeller ve bu durum büyük ölçekli iş birliği için ölçeklenebilirliği sınırlar.

Yukarıda gösterildiği gibi, Çoklu Ajan iş akışı şu şekilde çalışır: Supervisor Agent bir isteği iki alt göreve ayırarak iki alt ajana iletir. Her alt ajan kendi kısmını çözer ve sonuçları Supervisor Agent'a döndürür. Supervisor Agent bu sonuçları birleştirerek web istemcisine nihai yanıtı gönderir. Asenkron iletişim için RocketMQ kullanımı:
-
İstek işleme akışı:
Her alt ajan için bir görev arabellek kuyruğu olarak bir konu (Request) oluşturun. Yüksek öncelikli görevleri önce işlemek için bir öncelik konusu kullanın.
Supervisor Agent, bölünmüş görev ayrıntılarını ilgili istek konusuna gönderir.
-
Yanıt işleme akışı:
Supervisor Agent, Lite türünde bir konu (Response) oluşturur ve buna abone olur.
Her alt ajan, görev sonucunu Response konusu altındaki bir LiteTopic'e gönderir. Her göreve kendine ait özel bir LiteTopic vermek için her LiteTopic'i görev ID'sini kullanarak adlandırın.
Supervisor Agent, abonelik yoluyla sonuçları gerçek zamanlı olarak alır ve bunları HTTP SSE kullanarak web istemcisine iletir.
Kullanım durumu 2: Yapay zeka uygulamalarında oturum sürekliliği sorunlarını çözmek için dağıtılmış oturum durumu yönetimi
Yapay zeka uygulama etkileşimleri benzersizdir: uzun süren, çok turlu ve oturum başına pahalı hesaplama kaynaklarına yoğun şekilde bağımlıdır. Uygulamalar SSE gibi kalıcı bağlantılara güvendiğinde, herhangi bir bağlantı kesilmesi (ağ geçidi yeniden başlatmaları, zaman aşımları veya ağ kararsızlığı nedeniyle) mevcut oturum bağlamının kaybına ve zaten harcanmış yapay zeka hesaplama kaynaklarının boşa gitmesine neden olur.

1. kullanım durumundaki yanıt akışında olduğu gibi, gerçek zamanlı sonuç bildirimleri için Lite türünde bir konu kullanın. Her LiteTopic'i SessionID kullanarak adlandırın (örneğin, chatbot/{sessionID}). Tüm oturum sonuçları bu konuda sıralı mesajlar olarak teslim edilir. Yeniden bağlanma sonrası oturum sürekliliğini korumak için:
Web istemcisi, uygulama sunucusu düğümü 1 ile kalıcı bir bağlantı kurar ve Session2 oturumunu başlatır.
Uygulama sunucusu düğümü 1, LiteTopic [chat/SessionID2]'ye abone olur.
Büyük Dil Modeli (LLM) görev zamanlayıcısı, istekteki SessionID'ye göre sonuçları LiteTopic [chat/SessionID2]'ye gönderir.
Bir ağ sorunu nedeniyle WebSocket, uygulama sunucusu düğümü 2'ye yeniden bağlanır.
Uygulama sunucusu düğümü 1, LiteTopic [chat/SessionID2] aboneliğini iptal eder. Uygulama sunucusu düğümü 2 buna abone olur.
LiteTopic [chat/SessionID2], teslimatı son tüketilen ofsetten devam ettirerek sürekli oturum durumu ve verilerini sağlar.
Örnek kod
Tam örnekler için bkz. RocketMQ 5.x gRPC SDK içindeki örnek kodlar.
Mesaj gönderme
Producer producer = provider.newProducerBuilder()
.setTopics(topic)
.setClientConfiguration(clientConfiguration)
.build();
final Message message = provider.newMessageBuilder()
.setTopic(topic)
// Set a message key for precise lookup by keyword.
.setKeys("messageKey")
// Set LiteTopic
.setLiteTopic("lite-topic-1")
// Message body
.setBody("messageBody".getBytes())
.build();
try {
final SendReceipt sendReceipt = producer.send(message);
log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
} catch (LiteTopicQuotaExceededException e) {
// LiteTopic quota exceeded. Evaluate and increase quota.
log.error("Lite topic quota exceeded", e);
} catch (Throwable t) {
log.error("Failed to send message", t);
}
Mesaj tüketme
LitePushConsumer sınıfını kullanın:
// Initialize LitePushConsumer with consumer group, target topic, and communication parameters.
LitePushConsumer litePushConsumer = provider.newLitePushConsumerBuilder()
.setClientConfiguration(clientConfiguration)
// Topic bound to the ConsumerGroup when created in the console
.bindTopic(topicName)
// Set consumer group
.setConsumerGroup(consumerGroup)
.setMessageListener(messageView -> {
// Process message and return consumption result.
LOGGER.info("Consume message={}", messageView);
return ConsumeResult.SUCCESS;
})
.build();
try {
// Subscribe to desired LiteTopics
litePushConsumer.subscribeLite("lite-topic-1");
litePushConsumer.subscribeLite("lite-topic-2");
litePushConsumer.subscribeLite("lite-topic-3");
} catch (LiteSubscriptionQuotaExceededException e) {
// LiteTopic subscription quota exceeded. Evaluate and increase quota.
log.error("Lite subscription quota exceeded", e);
} catch (Throwable t) {
log.error("Failed to subscribe lite topic", t);
}
// After business processing, unsubscribe from unused LiteTopics promptly
litePushConsumer.unsubscribeLite("lite-topic-3");
// Get current set of subscribed LiteTopics
Set<String> liteTopicSet = litePushConsumer.getLiteTopicSet();
Abonelikleri dinamik olarak güncelleme
/**
* Dynamically add a subscription.
* The subscribeLite() method makes a network call and validates quotas,
* so it might fail.
* Always check the result to confirm successful subscription.
* Possible failure scenarios:
* 1. Network error – retry the call.
* 2. Quota validation fails – throws LiteSubscriptionQuotaExceededException.
* Evaluate whether your quota meets requirements, and promptly call
* unsubscribeLite() to release resources for unused topics.
*/
litePushConsumer.subscribeLite("lite-topic-1");
// Dynamically remove a subscription
litePushConsumer.unsubscribeLite("lite-topic-1");
Sınırlar
Tek bir tüketici en fazla 2.000 LiteTopic'e abone olabilir (destek bileti ile ayarlanabilir).
Her LiteTopic maksimum 200 tüketim TPS'sini destekler.
-
Hizmet kararlılığını sağlamak için her örnek, oluşturulabilecek veya abone olunabilecek toplam LiteTopic sayısı üzerinde bir sınır uygular. Belirli kotalar için aşağıdaki tabloya bakın (destek bileti ile ayarlanabilir).
-
LiteTopic Sayısı
Tanım: Tek bir örnek altında yaşam döngüsü sırasında oluşturulmuş ve aktif olan toplam LiteTopic sayısı.
Tetikleyici ve etki: Bu sınıra ulaşıldığında, mevcut olmayan bir LiteTopic'e mesaj gönderme girişimi (otomatik oluşturmayı tetikleyecek olan) gönderme hatasıyla başarısız olur.
-
LiteTopic Abonelik Sayısı
Tanım: Bir örnek altındaki tüm çevrimiçi tüketici istemcileri ile LiteTopic'ler arasındaki aktif abonelik ilişkilerinin toplam sayısı. Bu sayı dinamik olarak değişir.
Etki: Bu sınıra ulaşıldığında, bir tüketicinin yeni bir LiteTopic'e abone olma girişimi başarısız olur.
Özel kural: Bir LiteTopic silinse bile, buna yönelik kalan tüketici abonelikleri, tüketiciler aboneliği iptal edene kadar toplam sayıya dahil edilir.
-
Serverless örnekler
|
Dağıtım mimarisi |
Kapasite modu |
Teknik özellikler |
Oluşturulabilecek veya abone olunabilecek maksimum LiteTopic sayısı |
|
Özel |
Rezerve + esnek |
5000 |
300.000 |
|
10000 |
600.000 |
||
|
15000 |
720.000 |
||
|
[20.000, 50.000] |
1.000.000 |
||
|
(50.000, 100.000] |
1.500.000 |
||
|
(100.000, 200.000] |
2.400.000 |
||
|
(200.000, 300.000] |
4.700.000 |
||
|
(300.000, 500.000] |
6.300.000 |
||
|
(500.000, 1.000.000] |
11.600.000 |
Serverless olmayan örnekler (abonelik ve kullandıkça öde)
Standard Edition
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Professional Edition
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Platinum Edition
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|