Mevcut Java İleti Hizmeti (JMS) 2.0 uygulamalarını Apache ActiveMQ'dan Azure Service Bus'a geçirme

Bu makalede, Azure Service Bus ile etkileşime geçmek için bir JMS Aracısı ile etkileşim kuran mevcut bir Java İleti Hizmeti (JMS) 2.0 uygulamasının nasıl değiştirileceği açıklanır. Makale özellikle Apache ActiveMQ veya Amazon MQ'dan geçişi kapsar.

Azure Service Bus, Gelişmiş İleti Kuyruğa Alma Protokolü (AMQP) üzerinden JMS 2.0 API'sini kullanan Java 2 Platformu, Enterprise Sürümü ve Spring iş yüklerini destekler.

Başlamadan önce

Azure Service Bus ile Apache ActiveMQ arasındaki farklar

Hem Azure Service Bus hem de Apache ActiveMQ, istemci uygulamalarının ileti göndermesi ve ileti alması için JMS sağlayıcıları olarak işlev görür. Her ikisi de kuyruklarla noktadan noktaya semantiği etkinleştirir ve konu başlıkları ve aboneliklerle yayımla-abone ol semantiğini etkinleştirir.

Yine de, aşağıdaki tabloda gösterildiği gibi ikisi arasında bazı farklılıklar vardır:

Kategori ActiveMQ Azure Service Bus
Uygulama katmanlama Kümelenmiş monolith İki katmanlı
(ağ geçidi + arka uç)
Protokol desteği
  • AMQP
  • STOMP
  • OpenWire
AMQP
Sağlama modu
  • Hizmet olarak altyapı (IaaS), şirket içi
  • Amazon MQ (hizmet olarak yönetilen platform)
Hizmet olarak yönetilen platform (PaaS)
İleti boyutu Müşteri tarafından yapılandırılabilir 100 MB (Premium katman)
Yüksek kullanılabilirlik Müşteri tarafından yönetilen Platform tarafından yönetilen
Olağanüstü durum kurtarma Müşteri tarafından yönetilen Platform tarafından yönetilen

Geçerli desteklenen ve desteklenmeyen özellikler

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 API Status
Kuyruklar
  • JMSContext.createQueue( String queueName)
Destekleniyor
Konular
  • JMSContext.createTopic( String topicName)
Destekleniyor
Geçici kuyruklar
  • JMSContext.createTemporaryQueue()
Destekleniyor
Geçici konular
  • JMSContext.createTemporaryTopic()
Destekleniyor
İleti Üreticisi /
JMSProducer
  • JMSContext.createProducer()
Destekleniyor
Kuyruk tarayıcıları
  • JMSContext.createBrowser(Kuyruk kuyruğu)
  • JMSContext.createBrowser(Kuyruk kuyruğu, Dize iletisiSelector)
Destekleniyor
İleti 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 dayanıklı olmayan abonelikler
  • JMSContext.createSharedConsumer(Konu konusu, SharedSubscriptionName Dizesi)
  • JMSContext.createSharedConsumer(Konu konusu, SharedSubscriptionName Dizesi, Dize iletileriElektor)
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 Destekleniyor
Teslim Gecikmesi (zamanlanmış iletiler)
  • JMSProducer.setDeliveryDelay( long deliveryDelay)
Destekleniyor
İleti oluşturuldu
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Serializable nesnesi)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Dize metni)
Destekleniyor
Çapraz varlık işlemleri
  • Bağlan ion.createSession(true, Session.SESSION_TRANSACTED)
Destekleniyor
Dağıtılmış işlemler Desteklenmez

Dikkat edilmesi gerekenler

Azure Service Bus'ın iki katmanlı yapısı, çeşitli iş sürekliliği özelliklerine (yüksek kullanılabilirlik ve olağanüstü durum kurtarma) sahiptir. Ancak, JMS özelliklerini kullanırken dikkat edilmesi gereken bazı noktalar vardır.

Hizmet yükseltmeleri

Service Bus yükseltmeleri ve yeniden başlatmaları durumunda geçici kuyruklar veya konular silinir. Uygulamanız geçici kuyruklarda veya konularda veri kaybına karşı hassassa geçici kuyrukları veya konuları kullanmayın. Bunun yerine dayanıklı kuyrukları, konuları ve abonelikleri kullanın.

Veri taşıma

İstemci uygulamalarınızı Azure Service Bus ile etkileşim kuracak şekilde geçirme ve değiştirme işleminin bir parçası olarak, ActiveMQ'de tutulan veriler Service Bus'a geçirilmez. ActiveMQ kuyruklarını, konularını ve aboneliklerini boşaltmak ve ardından iletileri Service Bus'ın kuyruklarına, konu başlıklarına ve aboneliklerine yeniden oynatmak için özel bir uygulamaya ihtiyacınız olabilir.

Kimlik doğrulaması ve yetkilendirme

Microsoft Entra Id destekli Azure rol tabanlı erişim denetimi (Azure RBAC), Service Bus için tercih edilen kimlik doğrulama mekanizmasıdır. Rol tabanlı erişim denetimini etkinleştirmek için lütfen Azure Service Bus JMS 2.0 geliştirici kılavuzundaki adımları izleyin.

Geçiş öncesi

Sürüm denetimi

JMS uygulamalarını yazarken aşağıdaki bileşenleri ve sürümleri kullanırsınız:

Bileşen Sürüm
Java İleti Hizmeti (JMS) API'si 1.1 veya üzeri
AMQP protokolü 1.0

AMQP bağlantı noktalarının açık olduğundan emin olun

Service Bus, AMQP protokolü üzerinden iletişimi destekler. Bu amaçla 5671 (AMQP) ve 443 (TCP) bağlantı noktaları üzerinden iletişimi etkinleştirin. İstemci uygulamalarının barındırıldığı yere bağlı olarak, bu bağlantı noktaları üzerinden iletişime izin vermek için bir destek biletine ihtiyacınız olabilir.

Önemli

Service Bus yalnızca AMQP 1.0 protokollerini destekler.

Kurumsal yapılandırmaları ayarlama

Service Bus çeşitli kurumsal güvenlik ve yüksek kullanılabilirlik özellikleri sağlar. Daha fazla bilgi için bkz.

İzleme, uyarılar ve izleme

Her Service Bus ad alanı için ölçümleri Azure İzleyici'de yayımlarsınız. Bu ölçümleri, ad alanına ayrılan kaynakların uyarılması ve dinamik olarak ölçeklenmesi için kullanabilirsiniz.

Farklı ölçümler ve bunlar üzerinde uyarıların nasıl ayarlanacağı hakkında daha fazla bilgi için bkz . Azure İzleyici'de Service Bus ölçümleri. Ayrıca, veri işlemleri için istemci tarafı izleme ve yönetim işlemleri için işlem/tanılama günlüğü hakkında daha fazla bilgi edinebilirsiniz.

Ölçümler - Yeni Relic

ActiveMQ eşlemesindeki hangi ölçümlerin Azure Service Bus'ta hangi ölçümlerle ilişkilendirilebileceğini belirleyebilirsiniz. New Relic web sitesinden aşağıdakilere bakın:

Dekont

Şu anda New Relic' in ActiveMQ ile doğrudan ve sorunsuz tümleştirmesi yoktur, ancak Amazon MQ için kullanılabilecek ölçümleri vardır. Amazon MQ ActiveMQ'dan türetildiğinden, aşağıdaki tablo Amazon MQ'dan Azure Service Bus'a New Relic ölçümlerini eşler.

Ölçüm gruplandırma Amazon MQ/ActiveMQ ölçümü Azure Service Bus ölçümü
Aracı CpuUtilization CPUXNS
Aracı MemoryUsage WSXNS
Aracı CurrentConnectionsCount activeConnections
Aracı EstablishedConnectionsCount activeConnections + connectionsClosed
Aracı InactiveDurableTopicSubscribersCount Abonelik ölçümlerini kullanma
Aracı TotalMessageCount Kuyruk/konu/abonelik düzeyini kullanma activeMessages
Kuyruk/Konu EnqueueCount incomingMessages
Kuyruk/Konu DequeueCount outgoingMessages
Kuyruk QueueSize sizeBytes

Geçiş

Mevcut JMS 2.0 uygulamanızı Service Bus ile etkileşime geçirmek için sonraki birkaç bölümde yer alan adımları izleyin.

Topolojiyi ActiveMQ'den dışarı aktarma ve Service Bus'ta varlıkları oluşturma (isteğe bağlı)

İstemci uygulamalarının Service Bus ile sorunsuz bir şekilde bağlantı kurabilmesini sağlamak için topolojiyi (kuyruklar, konular ve abonelikler dahil) Apache ActiveMQ'dan Service Bus'a geçirin.

Dekont

JMS uygulamaları için kuyruklar, konular ve abonelikleri çalışma zamanı işlemi olarak oluşturursunuz. Çoğu JMS sağlayıcısı (ileti aracısı), çalışma zamanında bunları oluşturma olanağı sağlar. Bu nedenle bu dışarı aktarma adımı isteğe bağlı olarak kabul edilir. Uygulamanızın çalışma zamanında topoloji oluşturma izinlerine sahip olduğundan emin olmak için SAS Manage izinleriyle bağlantı dizesi kullanın.

Yapılacak eylem:

  1. Topolojiyi dışarı aktarmak için ActiveMQ komut satırı araçlarını kullanın.
  2. Azure Resource Manager şablonu kullanarak aynı topolojiyi yeniden oluşturun.
  3. Azure Resource Manager şablonunu çalıştırın.

Service Bus JMS uygulaması için maven bağımlılığını içeri aktarma

Service Bus ile sorunsuz bağlantı sağlamak için paketi Maven pom.xml dosyasına aşağıdaki gibi bağımlılık olarak ekleyinazure-servicebus-jms:

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

Uygulama sunucusu yapılandırma değişiklikleri

Bu bölüm, ActiveMQ'ye bağlanan istemci uygulamalarınızı barındıran uygulama sunucusuna özelleştirilir.

Spring uygulamaları

application.properties Dosyayı güncelleştirme

ActiveMQ'ye bağlanmak için spring boot uygulaması kullanıyorsanız, ActiveMQ'ya özgü özellikleri dosyadan application.properties kaldırmak istiyorsunuz.

spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>

Ardından, Dosyaya Service Bus'a application.properties özgü özellikleri ekleyin.

azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
şununla değiştir ActiveMQConnectionFactoryServiceBusJmsConnectionFactory

Sonraki adım, örneğini ActiveMQConnectionFactory ile değiştirmektir ServiceBusJmsConnectionFactory.

Dekont

Gerçek kod değişiklikleri uygulamaya ve bağımlılıkların nasıl yönetildiğine özgü olsa da, aşağıdaki örnek nelerin değiştirilmesi gerektiğine ilişkin rehberlik sağlar.

Daha önce aşağıdaki gibi nesnesinin ActiveMQConnectionFactoryörneğini oluşturmuş olabilirsiniz:


String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);

Connection connection = factory.createConnection();
connection.start();

Şimdi bunu, nesnesinin ServiceBusJmsConnectionFactoryörneğini aşağıdaki gibi oluşturacak şekilde değiştiriyorsunuz:


ServiceBusJmsConnectionFactorySettings settings = new ServiceBusJmsConnectionFactorySettings();
String SERVICE_BUS_CONNECTION_STRING = "<Service Bus Connection string>";

ConnectionFactory factory = new ServiceBusJmsConnectionFactory(SERVICE_BUS_CONNECTION_STRING, settings);

Connection connection = factory.createConnection();
connection.start();

Geçiş sonrası

Service Bus'tan ileti göndermeye ve almaya başlamak için uygulamayı değiştirdiğinize göre, beklediğiniz gibi çalıştığını doğrulamanız gerekir. Bu işlem tamamlandığında uygulama yığınınızı daha da geliştirip modernleştirmeye devam edebilirsiniz.

Sonraki adımlar

Service Bus ile sorunsuz tümleştirme için Azure Service Bus JMS için Spring Boot Starter kullanın.

Service Bus mesajlaşması ve JMS hakkında daha fazla bilgi edinmek için bkz: