Apache RocketMQ Java SDK kullanarak ApsaraMQ for RocketMQ ile mesaj gönderin ve alın. Bu sayfada hem gRPC protokolü SDK'sı (rocketmq-client-java) hem de Remoting protokolü SDK'sı (rocketmq-client) için örnekler yer almaktadır.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
ApsaraMQ for RocketMQ konsolunda oluşturulmuş konulara ve grup kimliklerine sahip bir ApsaraMQ for RocketMQ örneği
Örnek uç noktası (örneğin,
rmq-cn-XXXX.rmq.aliyuncs.com:8080)Projenize eklenmiş gerekli SDK bağımlılığı. Sürüm ayrıntıları için Sürüm kılavuzuna bakın
Serverless örneği kullanıyorsanız, devam etmeden önce Genel ağ erişimi için SDK sürüm gereksinimlerini kontrol edin.
gRPC protokolü SDK'sı
rocketmq-client-java SDK'sı, gRPC protokolü üzerinden iletişim kurar. Aşağıdaki tablolarda, Apache RocketMQ istemcileri deposunda barındırılan her mesaj türü için örnek kodlar listelenmiştir.
Spring Boot entegrasyonu için rocketmq-v5-client-spring-boot-samples adresine bakın.
gRPC protokolü SDK'sı ile işlemsel mesajlar gönderirken, üreticiyi başlatırken bir konu belirtin. Konu belirtilmezse işlem kontrolleri gecikir. Mesaj dört saat içinde gönderilmezse yarı işlemsel mesaj atılabilir.
Mesaj gönderme
| Mesaj türü | Örnek kod |
|---|---|
| Normal mesaj (senkron) | ProducerNormalMessageExample.java |
| Normal mesaj (asenkron) | AsyncProducerExample.java |
| Sıralı mesaj | ProducerFifoMessageExample.java |
| Zamanlanmış veya gecikmeli mesaj | ProducerDelayMessageExample.java |
| İşlemsel mesaj | ProducerTransactionMessageExample.java |
| Hafif mesaj | LiteProducerExample.java |
Mesaj tüketme
| Tüketici türü | Örnek kod |
|---|---|
| Push tüketici | PushConsumerExample.java |
| Basit tüketici (senkron) | SimpleConsumerExample.java |
| Basit tüketici (asenkron) | AsyncSimpleConsumerExample.java |
| Hafif push tüketici | LitePushConsumerExample.java |
Push tüketiciler ve basit tüketiciler hakkında daha fazla bilgi için Tüketici türleri bölümüne bakın.
Remoting protokolü SDK'sı
rocketmq-client SDK'sı, Remoting protokolü üzerinden iletişim kurar. Bu bölümde her mesaj türü için satır içi kodlar sağlanmıştır.
Spring Boot entegrasyonu için rocketmq-spring-boot-samples adresine bakın.
Ortak kurulum
Tüm Remoting protokolü örnekleri aynı kimlik doğrulama ve bağlantı kurulumunu paylaşır. Önce bu bölümü inceleyin, ardından aşağıdaki mesaj türüne özel kodlara bakın.
Kimlik doğrulama
Üreticiyi veya tüketiciyi nasıl başlatacağınız erişim yöntemine bağlıdır:
-
Genel uç nokta -- Örnek kullanıcı adı ve parolasıyla bir
RPCHookiletin: Örnek kullanıcı adını ve parolasını Resource Access Management konsolunun Intelligent Identity Recognition sekmesinden alın. Alibaba Cloud hesabınızın AccessKey ID ve AccessKey secret bilgisini kullanmayın.private static RPCHook getAclRPCHook() { return new AclClientRPCHook(new SessionCredentials("<instance-username>", "<instance-password>")); } // Pass the RPCHook when creating the producer DefaultMQProducer producer = new DefaultMQProducer(getAclRPCHook()); -
VPC uç noktası --
RPCHookgerekmez. Sunucu, VPC'ye göre kimlik doğrulaması yapar:DefaultMQProducer producer = new DefaultMQProducer(); Serverless örneği -- Genel ağ erişimi için bir
RPCHookiletin. Dahili ağ üzerinden parolasız erişim etkinleştirildiyseRPCHookgerekmez.
Bağlantı
// Group ID created in the ApsaraMQ for RocketMQ console
producer.setProducerGroup("<your-group-id>");
// Endpoint from the ApsaraMQ for RocketMQ console
// Use the domain name and port as shown. Do not add http:// or https://.
// Do not use a resolved IP address.
producer.setNamesrvAddr("<your-access-point>");
Mesaj izleri (isteğe bağlı)
Cloud mesaj izlemeyi etkinleştirmek için erişim kanalını ayarlayın ve izleri etkinleştirin:
producer.setAccessChannel(AccessChannel.CLOUD);
// Required for SDK v5.3.0 and later, in addition to setAccessChannel
producer.setEnableTrace(true);
Yer tutucu referansı
Aşağıdaki yer tutucuları gerçek değerlerinizle değiştirin:
| Yer tutucu | Açıklama | Örnek |
|---|---|---|
<instance-username> |
Konsoldan alınan örnek kullanıcı adı | -- |
<instance-password> |
Konsoldan alınan örnek parolası | -- |
<your-group-id> |
Konsolda oluşturulan grup kimliği | GID_example |
<your-access-point> |
Konsoldan alınan uç nokta | rmq-cn-XXXX.rmq.aliyuncs.com:8080 |
<your-topic> |
Konsolda oluşturulan konu | topic_example |
<your-order-topic> |
Sıralı mesajlar için konu | order_topic_example |
<your-transaction-topic> |
İşlemsel mesajlar için konu | transaction_topic_example |
<your-transaction-group-id> |
İşlemsel mesajlar için özel grup kimliği | GID_transaction_example |
<your-message-tag> |
Filtreleme için mesaj etiketi | TagA |
Normal mesajlar
Normal mesajlar, sıralama ve işlemsel garantilerin gerekmediği çoğu kullanım durumu için uygundur.
Sıralı mesajlar
Sıralı mesajlar, aynı parçalama anahtarı içinde FIFO (ilk giren ilk çıkar) teslimatı garanti eder. Sıralı olay işleme veya gerçek zamanlı veri senkronizasyonu gibi senaryolar için kullanın.
Zamanlanmış ve gecikmeli mesajlar
Zamanlanmış mesajlar belirli bir zamanda teslim edilir. Gecikmeli mesajlar yapılandırılabilir bir gecikmeden sonra teslim edilir. Her ikisi de __STARTDELIVERTIME kullanıcı özelliğini kullanır.
Zamanlanmış ve gecikmeli mesajları tüketme
Zamanlanmış ve gecikmeli mesajları normal mesajlar ile aynı şekilde tüketin. Ek yapılandırma gerekmez.
İşlemsel mesajlar
İşlemsel mesajlar iki aşamalı taahhüt protokolü kullanır. Üretici yarım işlemsel bir mesaj gönderir, yerel bir işlem çalıştırır ve ardından taahhüt eder veya geri alır. Aracı, işlenmemiş işlemleri düzenli olarak checkLocalTransaction öğesini çağırarak kontrol eder.
İşlemsel mesajlar için kullanılan grup kimliği diğer mesaj türleriyle paylaşılamaz. İşlemsel üreticiler için özel bir grup kimliği oluşturun.
İşlemsel mesajları tüketme
İşlemsel mesajları normal mesajlar ile aynı şekilde tüketin. Ek yapılandırma gerekmez.
Serverless örneği genel ağ erişimi
Bir Serverless örneğine genel ağ üzerinden erişmek için SDK'nızın minimum bir sürüm gereksinimini karşılaması gerekir. Aşağıda gösterilen ad alanı yapılandırmasını ekleyin.
InstanceId ifadesini gerçek örnek kimliğinizle değiştirin.
Remoting protokolü SDK'sı (rocketmq-client >= 5.2.0)
Ad alanını üreticiye veya tüketiciye ekleyin:
// Producer
producer.setNamespaceV2("InstanceId");
// Consumer
consumer.setNamespaceV2("InstanceId");
gRPC protokolü SDK'sı (rocketmq-client-java >= 5.0.6)
ClientConfiguration içinde ad alanını ayarlayın:
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
.setEndpoints(endpoints)
.setNamespace("InstanceId")
.setCredentialProvider(sessionCredentialsProvider)
.build();