Bu konuda, Java 2.x.x.Final TCP istemci SDK'sının kullanım notları, sürüm bilgileri, ortam gereksinimleri ve özellik değişiklikleri dahil olmak üzere sürüm notları açıklanmaktadır.
Kullanım notları
Java TCP istemci SDK'nızı yalnızca aşağıdaki bölgelerde V2.x.x.Final sürümüne yükseltebilirsiniz: Çin (Hangzhou), Çin (Qingdao), Çin (Beijing), Çin (Zhangjiakou), Çin (Hohhot), Çin (Shenzhen), Çin (Chengdu), Çin (Hong Kong), Almanya (Frankfurt) ve Endonezya (Cakarta). Java TCP istemci SDK'nızı diğer bölgelerde V2.x.x.Final sürümüne yükseltmeyin. Aksi takdirde, SDK'yı kullanarak ApsaraMQ for RocketMQ hizmetine bağlanamazsınız.
-
Java TCP istemci SDK 2.x.x.Final sürümünü kullanarak ApsaraMQ for RocketMQ hizmetine yalnızca sanal özel bulutlarda (VPC) erişebilirsiniz.
Mevcut bir ApsaraMQ for RocketMQ örneği kullanıyor ve bu örneğe klasik ağ üzerinden erişiyorsanız, Java TCP istemci SDK'nızı 2.x.x.Final sürümüne yükseltmeyin. Aksi takdirde, ApsaraMQ for RocketMQ örneğine erişemezsiniz.
-
Java TCP istemci SDK 2.x.x.Final sürümünü kullanarak yalnızca ad alanı içeren örneklere erişebilirsiniz. Kullandığınız örnek bir ad alanı içermiyorsa, Java TCP istemci SDK'nızı 2.x.x.Final sürümüne yükseltmeyin.
Varsayılan olarak, tüm ApsaraMQ for RocketMQ 5.x örnekleri ad alanı içerir. Bir ApsaraMQ for RocketMQ 4.x örneği kullanıyorsanız, ApsaraMQ for RocketMQ konsolu içindeki Instance Details sayfasının Basic Information bölümünden örneğin bir ad alanı içerip içermediğini kontrol edebilirsiniz.
Sürüm bilgileri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ortam gereksinimleri
Java SDK V2.x.x sürümünü kullanmak istiyorsanız, Java 8 veya sonraki sürümleri destekleyen bir Java Geliştirme Kiti (JDK) kullandığınızdan emin olun.
V2.0.5 sürümündeki özellik değişiklikleri
Optimize edilen özellik
Eşzamansız günlükler desteklenir.
Düzeltilen sorunlar
Toplu iş tüketimi için bekleme süresi belirtilemiyordu.
Belirli güvenlik açıkları düzeltildi.
V2.0.3 sürümündeki özellik değişiklikleri
Fixed issue
Sonraki JDK sürümlerinde, bir iş parçacığı havuzundaki iş parçacığı sayısı 32'den büyük bir değere çıkarılamıyordu.
V2.0.2 sürümündeki özellik değişiklikleri
Fixed issue
Mesaj gönderimi sırasında kilitlenme oluşabiliyordu.
V2.0.1 sürümündeki özellik değişiklikleri
Message trace
İz sorgusu sonuçlarında daha fazla veri döndürülür.
V2.0.0 sürümündeki özellik değişiklikleri
Ordered message
MaxReconsumeTimes parametresinin varsayılan değeri Integer.MAX değerinden 16'ya değiştirilmiştir. Bu parametre, sıralı mesajlar için maksimum yeniden deneme sayısını belirtir. Tüketici, maksimum yeniden deneme sayısına ulaştıktan sonra da bir mesajı tüketemezse mesaj dead-letter kuyruğuna iletilir. Sıralı mesajlar için maksimum yeniden deneme sayısını değiştirmek üzere MaxReconsumeTimes parametresinin değerini değiştirebilirsiniz.
Transactional message
Bir producer mesaj gönderirken LocalTransactionExecutor sınıfı null ise bir özel durum oluşur. Önceki sürümlerde bu hata için özel durum oluşmazdı.
Broadcasting consumption
Yayın tabanlı tüketim modunda, tüketimin başlayacağı tüketici ofsetini belirtmek için offsetStore işlemine çağrı yapabilirsiniz. Tüketici ofsetini belirtmezseniz tüketim en son tüketici ofsetinden başlar. Bu davranış önceki sürümlerle tutarlıdır.
Örnek kod:
public class BroadcastingConsumerExample {
public static void main(String[] args) throws InterruptedException {
Properties properties = new Properties();
properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId");
properties.put(PropertyKeyConst.AccessKey, "MyAccessKey");
properties.put(PropertyKeyConst.SecretKey, "MySecretKey");
// The TCP endpoint. You can obtain the endpoint in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console.
properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXXX");
// You can obtain the consumer offset by calling the offsetStore operations only in broadcasting consumption mode.
properties.put(PropertyKeyConst.MessageModel, MessageModel.BROADCASTING);
Consumer consumer = ONSFactory.createConsumer(properties);
// The frequency of calls for the AbstractOffsetStore method. The value 1 specifies that the system calls the AbstractOffsetStore method every second to set a persistent offset.
OffsetStore offsetStore = new AbstractOffsetStore(1) {
@Override
public Map<TopicPartition, Long> loadOffset() {
// The logic that is used to obtain the offset from an external storage system.
}
@Override
public void persistOffset(Map<TopicPartition, Long> offsetTable) {
// The logic that is used to persist the offset to an external storage system.
}
};
offsetStore.start();
consumer.setOffsetStore(offsetStore);
consumer.subscribe("testBroadcastingTopic", "TagA", new MessageListener() {
@Override
public Action consume(Message message, ConsumeContext context) {
// The logic that is used to consume messages.
return Action.CommitMessage;
}
});
consumer.start();
Thread.sleep(100000);
consumer.shutdown();
offsetStore.shutdown();
}
}
Consumption in Push mode
Normal mesajların toplu iş olarak tüketilmesi desteklenmez.
Belirtilen tüketim iş parçacığı sayısı 1 ile 1.000 arasındaki geçerli aralıkta değilse bir tüketici oluşturduğunuzda sistem bir özel durum oluşturur.
-
Tüketim kısıtlama özelliği eklendi. Mesaj tüketim oranlarını sınırlamak için tüketim kısıtlama özelliğini yapılandırabilirsiniz. Bu özellik, tüketici istemcilerinde ani mesaj artışlarından kaynaklanan uygulama özel durumlarının önlenmesine yardımcı olur. Aşağıdaki kodda, özel bir mesaj tüketim oranının nasıl belirtileceği gösterilmektedir.
NotTüketim kısıtlama özelliği, sıralı mesajların yeniden denenmeleri için geçerli değildir.
public class RateLimitConsumerExample { public static void main(String[] args) throws InterruptedException { Properties properties = new Properties(); properties.put(PropertyKeyConst.GROUP_ID, "MyGroupId"); properties.put(PropertyKeyConst.AccessKey, "MyAccessKey"); properties.put(PropertyKeyConst.SecretKey, "MySecretKey"); // The TCP endpoint. You can obtain the endpoint in the TCP Endpoint section of the Instance Details page in the ApsaraMQ for RocketMQ console. properties.put(PropertyKeyConst.NAMESRV_ADDR, "XXX"); Consumer consumer = ONSFactory.createConsumer(properties); // Specify the message consumption rate in testTopicA. In this example, the consumer client can consume only 10 messages per second. consumer.rateLimit("testTopicA", 10); consumer.subscribe("testTopic", "TagA", new MessageListener() { @Override public Action consume(Message message, ConsumeContext context) { // The logic that is used to consume messages. return Action.CommitMessage; } }); consumer.start(); Thread.sleep(100000); consumer.shutdown(); } }
Consumption in Pull mode
Pull modunda tüketim desteklenmez.
Log configuration
Varsayılan günlük yolu ~/logs/ons.log konumundan ~/logs/ons/ons-client.log konumuna değiştirilmiştir.
Günlük seviyeleri, logback çerçevesinde desteklenen günlük seviyeleriyle tutarlıdır. OFF, TRACE ve ALL günlük seviyeleri eklenmiştir. Önceki sürümler yalnızca ERROR, WARN, INFO ve DEBUG günlük seviyelerini destekler.
Günlükle ilgili parametreler eklemek için ortam değişkenleri desteklenir. Önceki sürümler yalnızca
-Dparametresini destekler.
Client creation
Geçersiz bir uç nokta belirtilirse sistem bir producer veya tüketici oluşturmaya çalışırken bir özel durum oluşturur.
Message trace
En yeni SDK kullanılarak mesaj gönderildiğinde ve alındığında iz sorgusu sonucuna aşağıdaki parametreler eklenir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
V2.0.0 sürümünde düzeltilen sorunlar
Aşağıdaki sorun düzeltildi: updateCredential işlemi kısa bir süre içinde birden çok kez çağrıldığında, AccessKey ID, AccessKey secret ve STS token güncellenirken atomiklik sağlanamadığı için Security Token Service (STS) kullanılarak RAM rolleri için hesaplar arası yetkilendirme başarısız olur.
STS yetkilendirmesi için örnek SDK kodu hakkında bilgi almak için bkz. Adım 2: Alibaba Cloud hesapları arasında kaynaklara erişim.