Aracılığıyla paylaş


Azure Service Bus JMS 2.0 geliştirici kılavuzu

Bu kılavuz, Java İleti Hizmeti (JMS) 2.0 API'sini kullanarak Azure Service Bus ile iletişimde başarılı olmanıza yardımcı olacak ayrıntılı bilgiler içerir.

Java geliştiricisi olarak, Azure Service Bus'ı kullanmaya yeni başladıysanız aşağıdaki makaleleri okumayı göz önünde bulundurun.

Başlarken Kavramlar

Java İleti Hizmeti (JMS) Programlama modeli

Java İleti Hizmeti API programlama modeli aşağıdaki bölümlerde gösterildiği gibi:

Not

Azure Service Bus Premium katmanı JMS 1.1 ve JMS 2.0'ı destekler.

Azure Service Bus - Standart katman sınırlı JMS 1.1 işlevselliğini destekler. Daha fazla ayrıntı için lütfen bu belgelere bakın.

JMS - Yapı taşları

Aşağıdaki yapı taşları JMS uygulamasıyla iletişim kurmak için kullanılabilir.

Not

Aşağıdaki kılavuz, Java İleti Hizmeti (JMS) için Oracle Java EE 6 Öğreticisi'nden uyarlanmıştır

Java İleti Hizmeti'ni (JMS) daha iyi anlamak için bu öğreticiye başvurmanız önerilir.

Bağlan ion fabrikası

Bağlantı fabrikası nesnesi, istemci tarafından JMS sağlayıcısına bağlanmak için kullanılır. Bağlantı fabrikası, yönetici tarafından tanımlanan bir dizi bağlantı yapılandırma parametresini kapsüller.

Her bağlantı fabrikası , QueueConnectionFactoryveya TopicConnectionFactory arabiriminin ConnectionFactorybir örneğidir.

Azure Service Bus'a bağlanmayı kolaylaştırmak için bu arabirimler sırasıyla , ServiceBusJmsQueueConnectionFactoryveya ServiceBusJmsTopicConnectionFactory aracılığıyla ServiceBusJmsConnectionFactoryuygulanır.

Önemli

JMS 2.0 API'sini kullanan Java uygulamaları, bağlantı dizesi kullanarak veya Microsoft Entra destekli kimlik doğrulamasından yararlanan bir TokenCredential kullanarak Azure Service Bus'a bağlanabilir. Microsoft Entra destekli kimlik doğrulamasını kullanırken, gerektiğinde kimliğe roller ve izinler atadığınızdan emin olun.

Azure'da sistem tarafından atanan bir yönetilen kimlik oluşturun ve oluşturmak için TokenCredentialbu kimliği kullanın.

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

daha sonra Bağlan ion fabrikası aşağıdaki parametrelerle örneklenebilir.

  • Belirteç kimlik bilgisi - OAuth belirteci sağlayabilen bir kimlik bilgilerini temsil eder.
  • Konak - Azure Service Bus Premium katmanı ad alanının ana bilgisayar adı.
  • ServiceBusJms Bağlan ionFactory Ayarlar özellik paketi;
    • connectionIdleTimeoutMS - milisaniye cinsinden boşta bağlantı zaman aşımı.
    • traceFrames - hata ayıklama için AMQP izleme çerçevelerini toplamak için boole bayrağı.
    • diğer yapılandırma parametreleri

Fabrika burada gösterildiği gibi oluşturulabilir. Belirteç kimlik bilgileri ve konak gerekli parametrelerdir, ancak diğer özellikler isteğe bağlıdır.

String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null); 

JMS hedefi

Hedef, istemcinin ürettiği iletilerin hedefini ve kullandığı iletilerin kaynağını belirtmek için kullandığı nesnedir.

Hedefler Azure Service Bus'taki varlıklarla eşleniyor - kuyruklar (noktadan noktaya senaryolarda) ve konular (pub-sub senaryolarında).

Bağlantılar

Bağlantı, bir JMS sağlayıcısıyla sanal bağlantıyı kapsüller. Azure Service Bus ile uygulama ile AMQP üzerinden Azure Service Bus arasında durum bilgisi olan bir bağlantıyı temsil eder.

Aşağıdaki örnekte gösterildiği gibi bağlantı fabrikasından bir bağlantı oluşturulur:

Connection connection = factory.createConnection();

Oturumlar

Oturum, iletilerin üretilmesine ve kullanılmasına yönelik tek iş parçacıklı bir bağlamdır. İletiler, ileti üreticileri ve tüketicileri oluşturmak için kullanılabilir, ancak aynı zamanda gönderme ve alma işlemlerinin atomik bir çalışma birimine gruplanması için işlem bağlamı sağlar.

Aşağıdaki örnekte gösterildiği gibi bağlantı nesnesinden bir oturum oluşturulabilir:

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

Not

JMS API,mesajlaşma oturumlarının etkinleştirildiği hizmet veri yolu kuyruklarından veya konu başlıklarından ileti almayı desteklemez.

Oturum modları

Aşağıdaki modlardan herhangi biriyle oturum oluşturulabilir.

Oturum modları Davranış
Session.AUTO_ACKNOWLEDGE Oturum, istemcinin bir iletiyi alma çağrısından başarıyla döndürdüğünde veya oturumun çağırdığı ileti dinleyicisi iletiyi başarıyla döndürdüğünde istemcinin bir iletiyi aldığını otomatik olarak kabul eder.
Session.CLIENT_ACKNOWLEDGE İstemci, iletinin onay yöntemini çağırarak tüketilen iletiyi kabul eder.
Session.DUPS_OK_ACKNOWLEDGE Bu bildirim modu, oturuma iletilerin teslimini lazily kabul etme talimatını sağlar.
Session.SESSION_TRANSACTED Bu değer, oturumun yerel bir işlem kullanması gerektiğini belirtmek için Bağlan ion nesnesindeki createSession(int sessionMode) yöntemine bağımsız değişken olarak geçirilebilir.

Oturum modu belirtilmediğinde, Session.AUTO_ACKNOWLEDGE varsayılan olarak seçilir.

JMSContext

Not

JMSContext, JMS 2.0 belirtiminin bir parçası olarak tanımlanır.

JMSContext, bağlantı ve oturum nesnesi tarafından sağlanan işlevselliği birleştirir. Bağlantı fabrikası nesnesinden oluşturulabilir.

JMSContext context = connectionFactory.createContext();

JMSContext modları

Session nesnesi gibi JMSContext de Oturum modlarında belirtilen onay modlarıyla oluşturulabilir.

JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);

Mod belirtilmediğinde, JMSContext.AUTO_ACKNOWLEDGE varsayılan olarak seçilir.

JMS ileti üreticileri

İleti üreticisi, JMSContext veya Session kullanılarak oluşturulan ve bir hedefe ileti göndermek için kullanılan bir nesnedir.

Aşağıdaki örnekte gösterildiği gibi tek başına nesne olarak oluşturulabilir:

JMSProducer producer = context.createProducer();

Veya bir iletinin gönderilmesi gerektiğinde çalışma zamanında oluşturulur.

context.createProducer().send(destination, message);

JMS ileti tüketicileri

İleti tüketicisi, JMSContext veya Session tarafından oluşturulan ve hedefe gönderilen iletileri almak için kullanılan bir nesnedir. Bu örnekte gösterildiği gibi oluşturulabilir:

JMSConsumer consumer = context.createConsumer(dest);

receive() yöntemiyle zaman uyumlu almalar

İleti tüketicisi, yöntemi aracılığıyla receive() hedeften ileti almak için zaman uyumlu bir yol sağlar.

Hiçbir bağımsız değişken/zaman aşımı belirtilmezse veya '0' zaman aşımı belirtilirse, ileti ulaşmadığı veya bağlantı kesilmediği sürece (hangisi daha önceyse) tüketici süresiz olarak engeller.

Message m = consumer.receive();
Message m = consumer.receive(0);

Sıfır olmayan pozitif bir bağımsız değişken sağlandığında, tüketici bu süreölçer süresi dolana kadar engeller.

Message m = consumer.receive(1000); // time out after one second.

JMS ileti dinleyicileriyle zaman uyumsuz almalar

İleti dinleyicisi, hedefteki iletilerin zaman uyumsuz işlenmesi için kullanılan bir nesnedir. Belirli bir iş mantığının MessageListeneronMessage yaşaması gereken yöntemi içeren arabirimini uygular.

bir ileti dinleyicisi nesnesinin örneği oluşturulmalıdır ve yöntemini kullanarak belirli bir ileti tüketicisine setMessageListener kaydedilmelidir.

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

Konu başlıklarından kullanma

JMS İleti Tüketicileri , kuyruk veya konu başlığı olabilecek bir hedefe karşı oluşturulur.

Kuyruklardaki tüketiciler, istemci uygulaması ile Azure Service Bus arasındaki Oturum (ve Bağlan ion) bağlamında yaşayan istemci tarafı nesneleridir.

Ancak konu başlıklarındaki tüketicilerin 2 bölümü vardır -

  • Session(veya JMSContext) bağlamında bulunan bir istemci tarafı nesnesi ve
  • Azure Service Bus'ta bir varlık olan abonelik.

Abonelikler burada belgelenmiştir ve aşağıdakilerden biri olabilir:

  • Paylaşılan dayanıklı abonelikler
  • Paylaşılan dayanıklı olmayan abonelikler
  • Paylaşılmayan dayanıklı abonelikler
  • Paylaşılmayan dayanıklı olmayan abonelikler

JMS Kuyruk Tarayıcıları

JMS API'sinde, uygulamanın kuyruktaki iletilere göz atmasına ve her ileti için üst bilgi değerlerini görüntülemesine olanak tanıyan bir QueueBrowser nesne sağlanır.

Kuyruk Tarayıcısı, aşağıdaki örnekte olduğu gibi JMSContext kullanılarak oluşturulabilir:

QueueBrowser browser = context.createBrowser(queue);

Not

JMS API bir konuya göz atmak için bir API sağlamaz.

Bunun nedeni, konu başlığının iletileri depolamamasıdır. İleti konuya gönderilir gönderilmez uygun aboneliklere iletilir.

JMS İleti seçicileri

İleti seçicileri, alınan iletileri filtrelemek için uygulamalar tarafından kullanılabilir. İleti seçicilerle, alıcı uygulama iletileri filtreleme işini bu sorumluluğu almak yerine JMS sağlayıcısına (bu örnekte Azure Service Bus) yükler.

Seçiciler aşağıdaki tüketicilerden herhangi birini oluştururken kullanılabilir -

  • Paylaşılan dayanıklı abonelik
  • Paylaşılmayan dayanıklı abonelik
  • Paylaşılan dayanıklı olmayan abonelik
  • Paylaşılmayan dayanıklı olmayan abonelik
  • Kuyruk tarayıcısı

AMQP dağıtımı ve Service Bus işlem eşlemesi

AMQP dağıtımının Service Bus işlemine nasıl çevrildiği şöyledir:

ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()

Özet

Bu geliştirici kılavuzunda Java İleti Hizmeti (JMS) kullanan Java istemci uygulamalarının Azure Service Bus'a nasıl bağlanabileceği gösterildi.

Sonraki adımlar

Azure Service Bus hakkında daha fazla bilgi ve Java İleti Hizmeti (JMS) varlıkları hakkında daha fazla bilgi için aşağıdaki makalelere göz atın: