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 |
Sağlama modu |
|
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 |
|
Destekleniyor |
Konular |
|
Destekleniyor |
Geçici kuyruklar |
|
Destekleniyor |
Geçici konular |
|
Destekleniyor |
İleti Üreticisi / JMSProducer |
|
Destekleniyor |
Kuyruk tarayıcıları |
|
Destekleniyor |
İleti Tüketicisi/ JMSConsumer |
noLocal şu anda desteklenmiyor |
Destekleniyor |
Paylaşılan dayanıklı abonelikler |
|
Destekleniyor |
Paylaşılmayan dayanıklı abonelikler |
noLocal şu anda desteklenmiyor ve false olarak ayarlanmalıdır |
Destekleniyor |
Paylaşılan dayanıklı olmayan abonelikler |
|
Destekleniyor |
Paylaşılmayan dayanıklı olmayan abonelikler |
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) |
|
Destekleniyor |
İleti oluşturuldu |
|
Destekleniyor |
Çapraz varlık işlemleri |
|
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.
- Sanal ağ hizmet uç noktaları
- Güvenlik duvarı
- Müşteri tarafından yönetilen anahtarla hizmet tarafı şifrelemesi (BYOK)
- Özel uç noktalar
- Kimlik doğrulama ve yetkilendirme
İ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:
- Topolojiyi dışarı aktarmak için ActiveMQ komut satırı araçlarını kullanın.
- Azure Resource Manager şablonu kullanarak aynı topolojiyi yeniden oluşturun.
- 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 ActiveMQConnectionFactory
ServiceBusJmsConnectionFactory
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: