Aracılığıyla paylaş


Azure Service Bus Premium ile Java Message Service 2.0 API kullanma

Bu makalede, Gelişmiş İleti Kuyruğa Alma Protokolü (AMQP) 1.0 protokolü üzerinden Azure Service Bus ile etkileşime geçmek için popüler Java İleti Hizmeti (JMS) 2.0 API'sinin nasıl kullanılacağı açıklanmaktadır.

Önemli notlar

  • JMS 2.0 API desteği için Azure Service Bus Premium katmanı ve azure-servicebus-jms kitaplığı gerekir. Premium ad alanında diğer JMS kitaplıklarının (örneğin, qpid-jms-client ) doğrudan kullanılması JMS 1.1 davranışına neden olur ve bazı JMS 2.0 özellikleri beklendiği gibi çalışmayabilir.
  • Kitaplık açık kaynaktır ve qpid-jms-client üzerine kurulmuştur; tüm qpid-jms-client API'leri bu kitaplıkla çalışır, dolayısıyla satıcı kilidi yoktur. Ayrıca ön getirme ilkeleri, yeniden bağlanma ilkeleri, Microsoft Entra Kimliği, Yönetilen Kimlik desteği ve Boşta Beklerken Otomatik Silme için varsayılan değerler sağlar.
  • Bu kitaplık Jakarta EE ve Java EE için iki çeşitte mevcuttur. Hangi yapıtın kullanılacağına ilişkin ayrıntılar için bkz. Jakarta EE ve javax desteği .

Jakarta EE ve javax desteği

Kitaplıkazure-servicebus-jms, hem eski Java EE () hem de yeni Jakarta EE (javax.jmsjakarta.jms) API ad alanlarını desteklemek için iki farklı değişkende kullanılabilir.

API ad alanı Maven yapıtı Versions JMS spesifikasyonu
jakarta.jms (Jakarta EE 9+) com.azure:azure-servicebus-jms 2.0.0+ Jakarta Messaging (JMS 2.0)
javax.jms (Java EE) com.microsoft.azure:azure-servicebus-jms 1.0.x JMS 2.0

Hangi yapıtı kullanmalıyım?

  • Projeniz Jakarta EE 9 veya üzerini (örneğin Spring Boot 3.x, Quarkus 3.x veya jakarta.jms.* içeri aktaran herhangi bir çerçeve) kullanıyorsa, com.azure yapıtını kullanın:

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-servicebus-jms</artifactId>
      <version>2.0.0</version>
    </dependency>
    
  • Projeniz hala Java EE kullanıyorsa (içeri aktarır javax.jms.*), yapıtı com.microsoft.azure kullanmaya devam edin:

    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-servicebus-jms</artifactId>
      <version>1.0.2</version>
    </dependency>
    

Önemli

İki yapıtı karıştırmayın. Projede com.azure:azure-servicebus-jms kullandığınızda ve javax.jms.* içe aktardığınızda derleme hataları ile karşılaşırsınız; bu durumun tersi de geçerlidir.

Javax'tan Jakarta'ya geçiş

Uygulamanızı Java EE'den Jakarta EE'ye yükseltiyorsanız:

  1. Maven bağımlılık grup kimliğinizi com.microsoft.azure'dan com.azure'e değiştirin ve sürümü 2.0.0 veya daha yenisine güncelleyin.
  2. Kodunuzdaki tüm javax.jms.* içeri aktarmalarını jakarta.jms.* olarak güncelleştirin.
  3. ServiceBusJmsConnectionFactory API ve yapılandırma her iki değişkende de aynı kalır, bu nedenle içeri aktarma ve bağımlılık güncelleştirmeleri dışında kod değişikliği gerekmez.

Önkoşullar

Service Bus’ı kullanmaya başlama

Bu kılavuzda zaten bir Service Bus ad alanınız olduğu varsayılır. Aksi takdirde, bir ad alanı ve kuyruk oluşturun ve bunun için Azure portalını kullanın. Service Bus ad alanları ve kuyrukları oluşturma hakkında daha fazla bilgi için bkz . Azure portalı aracılığıyla Service Bus kuyruklarını kullanmaya başlama.

Java Geliştirme ortamı ayarlama

Java uygulamaları geliştirmek için uygun geliştirme ortamını ayarlamanız gerekir -

  • JDK (Java Geliştirme Seti) veya JRE (Java Çalışma Zamanı Ortamı) yüklenir.
  • JDK veya JRE, derleme yoluna ve uygun sistem değişkenlerine eklenir.
  • JDK veya JRE kullanmak için bir Java IDE yüklenir. Örneğin, Eclipse veya IntelliJ.

Geliştirici ortamınızı Azure'da Java için hazırlama hakkında daha fazla bilgi edinmek için bu kılavuzu kullanın.

Hangi JMS özellikleri desteklenir?

Aşağıdaki tabloda, Azure Service Bus'ın şu anda desteklediği Java İleti Hizmeti (JMS) özellikleri listelenmiştir. Ayrıca desteklenmeyen özellikleri de gösterir.

Özellik Uygulama Programlama Arayüzü (API) Durum
Kuyruklar
  • JMSContext.createQueue( String queueName)
Destekleniyor
Konu başlıkları
  • JMSContext.createTopic( String topicName)
Destekleniyor
Geçici kuyruklar
  • JMSContext.createTemporaryQueue()
Destekleniyor
Geçici konular
  • JMSContext.createTemporaryTopic() geçici bir konu oluşturur.
Destekleniyor
İleti Üreticisi /
JMSProducer
  • JMSContext.createProducer()
Destekleniyor
Kuyruk tarayıcıları
  • JMSContext.createBrowser(Kuyruk kuyruğu)
  • JMSContext.createBrowser(Kuyruk kuyruğu, Dize iletisiSelector)
Destekleniyor
Mesaj Tüketicisi/
JMSConsumer
  • JMSContext.createConsumer( Hedef hedef)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisi Seçici)
  • JMSContext.createConsumer( Hedef hedef, String messageSelector, boolean noLocal)

noLocal şu anda desteklenmiyor
Destekleniyor
Paylaşılan dayanıklı abonelikler
  • JMSContext.createSharedDurableConsumer(Konu konusu, Dize adı)
  • JMSContext.createSharedDurableConsumer(Konu konusu, Dize adı, Dize iletisi Seçici)
Destekleniyor
Paylaşılmayan dayanıklı abonelikler
  • JMSContext.createDurableConsumer(Konu konusu, Dize adı)
  • createDurableConsumer(Konu başlığı, Dize adı, Dize iletisiSelector, boole noLocal)

noLocal şu anda desteklenmiyor ve false olarak ayarlanmalıdır
Destekleniyor
Paylaşılan geçici abonelikler
  • JMSContext.createSharedConsumer(Konu konusu, SharedSubscriptionName Dizesi)
  • JMSContext.createSharedConsumer(Konu konu, Dize paylaşımlıAbonelikAdi, Dize mesajSeçici)
Destekleniyor
Paylaşılmayan dayanıklı olmayan abonelikler
  • JMSContext.createConsumer(Hedef hedef)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisi Seçici)
  • JMSContext.createConsumer( Hedef hedef, String messageSelector, boolean noLocal)

noLocal şu anda desteklenmiyor ve false olarak ayarlanmalıdır
Destekleniyor
İleti seçicileri Oluşturulan tüketiciye bağlıdır. Service Bus seçicileri "LIKE" ve "BETWEEN" SQL anahtar sözcüklerini desteklemez. Destekleniyor
Teslim Gecikmesi (zamanlanmış iletiler)
  • JMSProducer.setDeliveryDelay( uzun teslimatGecikmesi)
Destekleniyor
İleti oluşturuldu
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Serileştirilebilir nesne)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Dize metni)
Destekleniyor
Çapraz varlık işlemleri
  • Bağlantı.oturumOluştur(true, Oturum.OTURUM_IŞLEM_GÖREN)
Destekleniyor
Dağıtılmış işlemler Desteklenmez

Java İleti Hizmeti (JMS) istemci kitaplığını indirme

Premium katmanda sağlanan tüm özellikleri kullanmak için azure-servicebus-jms kitaplığını projenizin derleme yoluna ekleyin. Bu paket, ön getirme ilke değerleri, yeniden bağlanma stratejileri, Microsoft Entra Id ve Yönetilen Kimlik desteği gibi gerekli varsayılan değerleri kullanıma hazır olarak sağlar. Projenizin API ad alanıyla eşleşen yapıtı seçin (ayrıntılar için jakarta EE ve javax desteğine bakın):

Jakarta EE (jakarta.jms):

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-servicebus-jms</artifactId>
  <version>2.0.0</version>
</dependency>

Java EE (javax.jms):

<dependency>
  <groupId>com.microsoft.azure</groupId>
  <artifactId>azure-servicebus-jms</artifactId>
  <version>1.0.2</version>
</dependency>

Not

Kitaplığı derleme yoluna eklemek için , maven veya Gradle gibi projeniz için tercih edilen bağımlılık yönetimi aracını kullanın.

Java uygulamalarını kodlama

Bağımlılıklar içeri aktarıldıktan sonra Java uygulamaları JMS sağlayıcısından bağımsız bir şekilde yazılabilir.

JMS kullanarak Azure Service Bus'a bağlanma

JMS istemcilerini kullanarak Azure Service Bus'a bağlanmak için, Birincil Bağlantı Dizesi altındaki Azure portalındaki 'Paylaşılan Erişim İlkeleri'nde bulunan bağlantı dizesi gerekir.

  1. Örnekleme yap ServiceBusJmsConnectionFactorySettings

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. ServiceBusJmsConnectionFactory uygun ServiceBusConnectionString kullanarak oluştur.

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. ConnectionFactory öğesini kullanarak bir Connection oluşturun ve sonra da Session

    Connection connection = factory.createConnection();
    Session session = connection.createSession();
    

    veya a JMSContext (JMS 2.0 istemcileri için)

    JMSContext jmsContext = factory.createContext();
    

    Önemli

    Benzer şekilde adlandırılmış olsa da JMS 'Session' ve Service Bus 'Session' birbirinden tamamen bağımsızdır.

    JMS 1.1'de Session, MessageProducer, MessageConsumer ve Message'nin kendisinin oluşturulmasına olanak tanıyan API'nin önemli bir yapı taşıdır. Daha fazla ayrıntı için JMS API programlama modelini gözden geçirin

    Service Bus'ta, oturumlar, kuyruklar ve aboneliklerde FIFO işlemeyi etkinleştirmek için hizmet ve istemci taraflı bir yapıdır.

JMS uygulamasını yazma

Session veya JMSContext örneği oluşturulduktan sonra, uygulamanız hem yönetim hem de veri işlemlerini gerçekleştirmek için tanıdık JMS API'lerini kullanabilir. Hangi API'lerin desteklendiğine bakmak için desteklenen JMS özelliklerinin listesine bakın. JMS'yi kullanmaya başlamak için bazı örnek kod parçacıkları aşağıda verilmiştir:

Kuyruğa ve konuya ileti gönderme

// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();

// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();

// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);

Kuyruktan ileti alma

// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");

// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);

// Receive the message
Message msg = (Message) consumer.receive();

Bir konudaki paylaşılan dayanıklı abonelikten ileti alma

// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");

// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");

// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();

Özet

Bu kılavuzda, AMQP 1.0 üzerinden Java İleti Hizmeti (JMS) kullanan Java istemci uygulamalarının Azure Service Bus ile nasıl etkileşim kurabileceği gösterildi.

Service Bus AMQP 1.0'ı .NET, C, Python ve PHP gibi diğer dillerde de kullanabilirsiniz. Bu farklı diller kullanılarak oluşturulan bileşenler, Service Bus'taki AMQP 1.0 desteğini kullanarak güvenilir ve tam uygunlukta ileti alışverişi yapabilir.