Mevcut Java Message Service (JMS) 2.0 uygulamalarını Apache ActiveMQ'dan Azure Service Bus

Bu makalede, bir JMS Aracısı ile etkileşim kurarak Azure İleti Hizmeti (JMS) 2.0 uygulaması yerine Azure Service Bus değiştirme açıklanmıştır. Makale özellikle Apache ActiveMQ veya Amazon MQ'dan nasıl kaynakla ilgili bilgidir?

Azure Service Bus Gelişmiş İleti Kuyruğu 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

Azure Service Bus ve Apache ActiveMQ, istemci uygulamalarının ileti göndermesi ve buradan ileti almaları için JMS sağlayıcıları olarak görev alan ileti aracılarıdır. Her ikisi de kuyruklarla noktadan noktaya semantiği etkinleştirir ve konu başlıkları ve aboneliklerle yayımlama-abone olma semantiği sağlar.

Bu nedenle, aşağıdaki tabloda da olduğu gibi ikisi arasında bazı farklar vardır:

Kategori ActiveMQ Azure Service Bus
Uygulama katmanlama Kümelenmiş monolitik İ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 (yönetilen hizmet olarak platform)
Yönetilen hizmet olarak 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'ın şu anda desteklediği Java Message Service (JMS) Service Bus listelemektedir. Ayrıca desteklenmeyen özellikleri de gösterir.

Özellik API Durum
Kuyruklar
  • JMSContext.createQueue( String queueName)
Desteklenir
Konu başlıkları
  • JMSContext.createTopic( Dize konu başlığıAdı)
Desteklenir
Geçici kuyruklar
  • JMSContext.createTemporaryQueue()
Desteklenir
Geçici konular
  • JMSContext.createTemporaryTopic()
Desteklenir
İleti Üreticisi /
JMSProducer
  • JMSContext.createProducer()
Desteklenir
Kuyruk tarayıcıları
  • JMSContext.createBrowser(Kuyruk kuyruğu)
  • JMSContext.createBrowser(Kuyruk kuyruğu, Dize iletisiSelector)
Desteklenir
İleti Tüketicisi/
JMSConsumer
  • JMSContext.createConsumer( Hedef hedef)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisiSelector)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisiSelector, boolean noLocal)

noLocal şu anda desteklenmiyor
Desteklenir
Paylaşılan dayanıklı abonelikler
  • JMSContext.createSharedDurableConsumer(Konu başlığı, Dize adı)
  • JMSContext.createSharedDurableConsumer(Konu başlığı, Dize adı, Dize iletisiSelector)
Desteklenir
Paylaşılmayan dayanıklı abonelikler
  • JMSContext.createDurableConsumer(Konu başlığı, Dize adı)
  • createDurableConsumer(Konu başlığı, Dize adı, Dize iletisiSelector, boolean noLocal)

noLocal şu anda desteklenmiyor ve false olarak ayarlandı
Desteklenir
Paylaşılan dayanıklı olmayan abonelikler
  • JMSContext.createSharedConsumer(Konu başlığı, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Konu başlığı, Dize sharedSubscriptionName, Dize iletisiSelector)
Desteklenir
Paylaşılmayan dayanıklı olmayan abonelikler
  • JMSContext.createConsumer(Hedef hedef)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisiSelector)
  • JMSContext.createConsumer( Hedef hedef, Dize iletisiSelector, boolean noLocal)

noLocal şu anda desteklenmiyor ve false olarak ayarlandı
Desteklenir
İleti seçiciler oluşturulan tüketiciye bağlıdır Desteklenir
Teslim Gecikmesi (zamanlanmış iletiler)
  • JMSProducer.setDeliveryDelay( long deliveryDelay)
Desteklenir
İleti oluşturuldu
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Serializable nesnesi)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Dize metni)
Desteklenir
Çapraz varlık işlemleri
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
Desteklenir
Dağıtılmış işlemler Desteklenmez

Dikkat edilmesi gerekenler

Azure yönetiminin iki katmanlı yapısı Service Bus çeşitli iş sürekliliği özelliklerini (yüksek kullanılabilirlik ve olağanüstü durum kurtarma) karşılar. 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 konu başlıklarında veri kaybına duyarlı ise geçici kuyrukları veya konuları kullanmayın. Bunun yerine dayanıklı kuyruklar, konu başlıkları ve abonelikler kullanın.

Veri geçişi

İstemci uygulamalarınızı Azure Service Bus ile etkileşim kurmak için geçirme ve değiştirmenin bir parçası olarak, ActiveMQ'da bulunan veriler Service Bus. ActiveMQ kuyruklarını, konu başlıklarını ve aboneliklerini boşaltmak ve ardından iletileri bir uygulamanın kuyruklarında, konu başlıklarında ve aboneliklerinde yeniden oynatmak için özel bir Service Bus.

Kimlik doğrulaması ve yetkilendirme

Azure rol tabanlı erişim denetimi (Azure RBAC), Azure Active Directory için tercih edilen kimlik doğrulama mekanizmasıdır Service Bus. Azure RBAC veya talep tabanlı kimlik doğrulaması şu anda Apache QPID JMS tarafından destekleneneden, ancak kimlik doğrulaması için SAS anahtarlarını kullansanız gerekir.

Geçiş öncesi

Sürüm denetimi

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

Bileşen Sürüm
Java İleti Hizmeti (JMS) API'si 1.1 veya daha büyük
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 nerede barındırıldıklarına bağlı olarak, bu bağlantı noktaları üzerinden iletişime izin vermek için bir destek biletine ihtiyacınız olabilir.

Önemli

Service Bus AMQP 1.0 protokolünü destekler.

Kurumsal yapılandırmaları ayarlama

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

İzleme, uyarılar ve izleme

Her bir Service Bus alanı için, ölçümleri her bir ad alanına Azure İzleyici. Ad alanına ayrılan kaynakların uyarı ve dinamik ölçeklendirmesi için bu ölçümleri kullanabilirsiniz.

Farklı ölçümler ve uyarılar ayarlama hakkında daha fazla bilgi için bkz. Service Bus'de Azure İzleyici. 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 bulabilirsiniz.

Ölçümler - New Relic

ActiveMQ'daki hangi ölçümlerin Azure'da hangi ölçümlerle eşlene Service Bus. Web sitesinden aşağıdakilere New Relic bakın:

Not

Şu New Relic ActiveMQ ile doğrudan, sorunsuz tümleştirmesi yok ancak Amazon MQ için ölçümleri var. Amazon MQ, ActiveMQ'dan türetilen bir tablo olduğundan, aşağıdaki tabloda Amazon MQ'New Relic Azure Service Bus.

Ölçüm gruplama Amazon MQ/ActiveMQ ölçümü Azure Service Bus ölçümü
Broker CpuUtilization CPUXNS
Broker MemoryUsage WSXNS
Broker CurrentConnectionsCount activeConnections
Broker EstablishedConnectionsCount activeConnections + connectionsClosed
Broker InactiveDurableTopicSubscribersCount Abonelik ölçümlerini kullanma
Broker TotalMessageCount Kuyruk/konu başlığı/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 geçirmek için sonraki birkaç bölümdeki adımları izleyin.

activemq ' den topolojiyi dışarı aktarın ve Service Bus varlıkları oluşturun (isteğe bağlı)

istemci uygulamalarının Service Bus sorunsuzca bağlanmasına emin olmak için, topolojiyi (kuyruklar, konular ve abonelikler dahil) Apache activemq ' dan Service Bus geçirin.

Not

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

Bunu yapmak için:

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

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

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

<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 ' a bağlanan istemci uygulamalarınızı barındıran uygulama sunucusuna özelleştirilir.

Yay uygulamaları

Dosyayı güncelleştirme application.properties

ActiveMQ 'e bağlanmak için bir Spring Boot uygulaması kullanıyorsanız, ActiveMQ 'e özgü özellikleri dosyadan kaldırmak istersiniz application.properties .

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

sonra, Service Bus özgü özellikleri application.properties dosyaya ekleyin.

azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Değiştir ActiveMQConnectionFactory``ServiceBusJmsConnectionFactory

Bir sonraki adım, öğesinin örneğini ActiveMQConnectionFactory ile değiştirmek ServiceBusJmsConnectionFactory .

Not

Gerçek kod değişiklikleri uygulamaya özeldir ve bağımlılıkların yönetilmesi, ancak aşağıdaki örnek, nelerin değiştirilmesi gerektiğine ilişkin rehberlik sağlar.

Daha önce, bir nesnesini şu şekilde örnekleniyor olabilirsiniz ActiveMQConnectionFactory :


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

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

Şimdi bunu bir nesnesinin örneğini oluşturmak için şu ServiceBusJmsConnectionFactory ş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ı

artık uygulamayı Service Bus iletileri göndermeye ve almaya başlamak üzere değiştirdiğine göre, bunun beklendiği gibi çalıştığını doğrulamanız gerekir. Bu tamamlandığında, uygulama yığınınızı daha da belirginleştirmek ve modernleştirin için devam edebilirsiniz.

Sonraki adımlar

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

Service Bus mesajlaşma ve jms hakkında daha fazla bilgi edinmek için bkz.: