Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Bu kılavuzda, mevcut bir WebLogic Server uygulamasını Azure Kubernetes Service kapsayıcısında WildFly üzerinde çalışacak şekilde geçirmek istediğinizde bilmeniz gerekenler açıklanmaktadır.
Geçişin başarılı olduğundan emin olmak için, başlamadan önce aşağıdaki bölümlerde açıklanan değerlendirme ve envanter adımlarını tamamlayın.
Geçiş öncesi gereksinimleri karşılayamazsanız yardımcı geçiş kılavuzuna bakın:
Geçerli üretim sunucularının donanımını (bellek, CPU, disk) ve ortalama ve en yüksek istek sayısını ve kaynak kullanımını belgeleyin. Seçtiğiniz geçiş yolundan bağımsız olarak bu bilgilere ihtiyaç duyacaksınız. Örneğin düğüm havuzunuzdaki VM'lerin boyutunu, kapsayıcı tarafından kullanılacak bellek miktarını ve kapsayıcının ihtiyaç duyduğu CPU paylaşımını seçmeye yardımcı olmak için yararlıdır.
AKS'de düğüm havuzlarını yeniden boyutlandırmak mümkündür. Nasıl yapılacağını öğrenmek için bkz . Azure Kubernetes Service'te (AKS) düğüm havuzlarını yeniden boyutlandırma.
"Hizmet olarak yapılandırma" teknolojilerindeki Azure Key Vault gibi gelişmelerden önce bile iyi tanımlanmış bir "gizli dizi" kavramı yoktu. Bunun yerine şimdi aslında “gizli dizi” olarak adlandırabileceğimiz bir işlev üstlenen ayrı bir yapılandırma ayarları kümeniz vardı. WebLogic Server gibi uygulama sunucularıyla, bu gizli diziler birçok farklı yapılandırma dosyasında ve yapılandırma deposunda yer alır. Üretim sunucularındaki tüm özellikleri ve yapılandırma dosyalarını gizli diziler ve parolalar için denetleyin. WAR dosyalarında weblogic.xml’yi denetlediğinizden emin olun. Ayrıca uygulamanızın içinde parolalar ve kimlik bilgileri içeren yapılandırma dosyaları da bulunabilir. Daha fazla bilgi için bkz. Temel Azure Key Vault kavramları.
Genel SSL uç noktaları için kullanılan tüm sertifikaları belgeleyin. Aşağıdaki komutu çalıştırarak üretim sunucularındaki tüm sertifikaları görüntüleyebilirsiniz:
keytool -list -v -keystore <path to keystore>
Tüm JNDI kaynaklarının envanterini çıkarın. Örneğin, veritabanları gibi veri kaynaklarıyla ilişkilendirilmiş bir JNDI adı vardır ve bu ad JPA’nın EntityManager
örneklerini belirli bir veritabanına doğru bağlamasına olanak tanır. JNDI kaynakları ve veritabanları hakkında daha fazla bilgi için Oracle belgelerinde WebLogic Server Veri Kaynakları’na bakın. JNDI ile ilgili diğer kaynaklar, örneğin JMS ileti aracıları geçiş veya yeniden yapılandırma gerektirebilir. JMS yapılandırması hakkında daha fazla bilgi için bkz . Oracle WebLogic Server 12.2.1.4.0.
Uygulamanız Oracle Coherence*Web içeren veya içermeyen oturum çoğaltmaya dayanıyorsa iki seçeneğiniz vardır:
Uygulamanızda herhangi bir veritabanı kullanılıyorsa aşağıdaki bilgileri yakalamanız gerekir:
WebLogic’teki JDBC sürücüleri hakkında daha fazla bilgi için bkz. WebLogic Sunucusuyla JDBC Sürücülerini Kullanma.
Aşağıdaki özelleştirmelerden hangilerinin yapıldığını saptayın ve yapılmış olanları yakalayın.
Uygulamanızın şirket içi hizmetlerinizden birine erişmesi gerekiyorsa Azure’ın bağlantı hizmetlerinden birini sağlamalısınız. Daha fazla bilgi için bkz. Şirket içi ağı Azure’a bağlama. Alternatif olarak şirket içi kaynaklarınızın kullanıma sunduğu genel kullanıma açık API’leri kullanmak için uygulamanızı yeniden düzenlemeniz gerekir.
Uygulamanız JMS Kuyruklarını veya Konularını kullanıyorsa, bunları dışarıda barındırılan bir JMS sunucusuna geçirmeniz gerekir. Azure Service Bus ve Gelişmiş İleti Sıraya Alma Protokolü (AMQP), JMS kullananlar için harika bir geçiş stratejisi olabilir. Daha fazla bilgi için bkz . Azure Service Bus standardı ve AMQP 1.0 ile Java İleti Hizmeti 1.1'i kullanma.
JMS kalıcı depoları yapılandırıldıysa, bunların yapılandırmasını yakalamalı ve geçiş sonrasında uygulamalısınız.
Paylaşılan Java EE kitaplığı özelliğini kullanıyorsanız iki seçeneğiniz vardır:
WebLogic sunucusuna eklenmiş OSGi paketlerini kullandıysanız, eşdeğer JAR dosyalarını doğrudan web uygulamanıza eklemeniz gerekir.
Uygulamanız konak işletim sisteminde bağımlılıkları olan herhangi bir kod içeriyorsa, bu bağımlılıkları kaldırmak için yeniden düzenlemeniz gerekir. Örneğin, dosya sistemi yollarının herhangi bir kullanımını veya /
uygulamanızın \
Windows üzerinde çalışıyorsa ile File.Separator
Paths.get
değiştirmeniz gerekebilir.
Uygulamanız Oracle Service Bus (OSB) kullanıyorsa OSB’nin nasıl yapılandırıldığını yakalamanız gerekir. Daha fazla bilgi için bkz. Oracle Service Bus Yüklemesi Hakkında.
Uygulamanız birden çok WAR’dan oluşuyorsa, bu WAR dosyalarından her birini ayrı uygulama olarak değerlendirmeli ve her biri için bu kılavuzu izlemelisiniz.
Uygulamanız EAR dosyası olarak paketlendiyse, application.xml ve weblogic-application.xml dosyalarını incelediğinizden ve yapılandırmalarını yakaladığınızdan emin olun.
Not
Azure Kubernetes Service kaynaklarınızı daha iyi kullanmak için web uygulamalarınızın her birini bağımsız olarak ölçeklendirebilmek istiyorsanız EAR'yi ayrı web uygulamalarına ayırmanız gerekir.
Uygulama sunucusunun dışında çalıştırılan izleme deamon’ları gibi işlemleriniz varsa, bunları ortadan kaldırmanız veya başka bir yere geçirmeniz gerekir.
Azure Kubernetes Service'te WildFly kullanmak için java'nın belirli bir sürümü gerekir, bu nedenle uygulamanızın desteklenen sürümü kullanarak doğru şekilde çalıştığını onaylamanız gerekir.
Not
Geçerli sunucunuz desteklenmeyen bir JDK (Oracle JDK veya IBM OpenJ9 gibi) çalıştırıyorsa bu doğrulama özellikle önemlidir.
Geçerli Java sürümünüzü öğrenmek için üretim sunucunuzda oturum açın ve şu komutu çalıştırın:
java -version
WildFly’ı çalıştırmak için kullanmanız gereken sürüm hakkında bilgi almak için Gereksinimler’e bakın.
Quartz Scheduler görevleri veya Unix cron işleri gibi zamanlanmış işler Azure Kubernetes Service (AKS) ile KULLANıLMAMALIDIR. Azure Kubernetes Service zamanlanan görevler içeren bir uygulamayı dahili olarak dağıtmanızı engellemez. Bununla birlikte uygulamanızın ölçeği genişletildiyse, aynı zamanlanan iş zamanlama dönemi başına birden çok kez çalıştırılabilir. Bu durum istenmeyen sonuçlar doğurabilir.
Zamanlanan işleri AKS kümenizde yürütmek için gerektiği gibi Kubernetes CronJobs tanımlayın. Daha fazla bilgi edinmek için bkz. Bir CronJob ile Otomatikleştirilmiş Görev Çalıştırma.
Dağıtımı gerçekleştirmek için şu anda WebLogic Betik Aracı'nı (WLST) kullanıyorsanız, ne yaptığını değerlendirmeniz gerekir. WLST dağıtım kapsamında uygulamanızın herhangi bir (çalışma zamanı) parametresini değiştiriyorsa, bu parametrelerin aşağıdaki seçeneklerden birine uydığından emin olun:
WLST yukarıda bahsedilenden daha fazlasını yapıyorsa, geçiş sırasında yapmanız gereken bazı ek işler olacaktır.
Uygulamanız WebLogic’e özgü API’leri kullanıyorsa bu bağımlılıkları kaldırmak için uygulamanızı yeniden düzenlemeniz gerekir. Örneğin Oracle WebLogic Server için Java API Başvurusu’nda bahsedilen bir sınıfı kullandıysanız, uygulamanızda WebLogic’e özgü bir API kullanmışsınızdır. Başvuruyu kaldırmak için yeniden düzenlemeniz gerekir.
Uygulamanız Beans veya EJB 2. x tarzı CMP Beans kullanıyorsa, bu bağımlılıkları kaldırmak için uygulamanızı yeniden düzenlemeniz gerekir.
Java EE Uygulama İstemcisi özelliğini kullanarak (sunucu) uygulamanıza bağlanan Java EE Uygulama İstemciniz varsa, hem istemci uygulamalarınızı hem de (sunucu) uygulamalarınızı HTTP API’lerini kullanacak şekilde yeniden düzenlemeniz gerekir.
Uygulamanız bir dağıtım planı kullanılarak dağıtıldıysa, dağıtım planının ne yaptığını değerlendirin. Dağıtım planınız düz bir dağıtımsa web uygulamanızı herhangi bir değişiklik yapmadan dağıtabilirsiniz. Dağıtım planı daha ayrıntılıysa JBoss CLI kullanarak uygulamanızı dağıtımın bir parçası olarak düzgün yapılandırıp yapılandıramayacağınızı belirleyin. JBoss CLI'yi kullanmak mümkün değilse uygulamanızı bir dağıtım planına gerek kalmayacak şekilde yeniden düzenlemeniz gerekir.
Uygulamanız EJB zamanlayıcılarını kullanıyorsa, EJB zamanlayıcı kodunun her WildFly örneğinden bağımsız olarak tetiklenebildiğini doğrulamanız gerekir. Azure Kubernetes Service dağıtım senaryosunda her EJB zamanlayıcısı kendi WildFly örneğinde tetikleneceği için bu doğrulama gereklidir.
Uygulama sunucusundaki dosya sisteminin herhangi bir kullanımı için yeniden yapılandırma veya nadir durumlarda mimari değişiklikler gerekir. Dosya sistemi WebLogic paylaşılan modülleri veya uygulama kodunuz tarafından kullanılabilir. Aşağıdaki bölümlerde açıklanan senaryoların bazılarını veya tümünü tanımlayabilirsiniz.
Uygulamanız şu anda statik içerik sunuyorsa bunun için alternatif bir konumunuz olması gerekir. Statik içeriği Azure Blob Depolama’ya taşımayı ve küresel olarak ışık hızında indirme işlemleri için Azure CDN eklemeyi düşünebilirsiniz. Daha fazla bilgi için bkz . Azure Depolama'da statik web sitesi barındırma ve Hızlı Başlangıç: Azure depolama hesabını Azure CDN ile tümleştirme.
Uygulamanız tarafından karşıya yüklenen/üretilen ama oluşturulduktan sonra sabit hale gelen statik içeriğe uygulamanızda izin veriliyorsa, karşıya yüklemeleri ve CDN yenilemesini işlemek için Azure İşlevi’yle birlikte yukarıda açıklandığı gibi Azure Blob Depolama ve Azure CDN kullanabilirsiniz. Azure İşlevleri ile statik içeriği karşıya yükleme ve CDN’ye önceden yükleme başlığı altında kullanımınıza ilişkin örnek bir uygulama sağladık.
Uygulamanız tarafından sık sık yazılan ve okunan dosyalar (geçici veri dosyaları gibi) veya yalnızca uygulamanız tarafından görülebilen statik dosyalar için, Azure Depolama paylaşımlarını kalıcı birimler olarak bağlayabilirsiniz. Daha fazla bilgi için bkz. Azure Kubernetes Service'te (AKS) Azure Dosyalar ile birim oluşturma ve kullanma.
Uygulamanız JCA bağlayıcıları kullanıyorsa WildFly’da JCA bağlayıcının kullanılabildiğini doğrulamanız gerekir. JCA uygulaması WebLogic’e bağlıysa uygulamanızı yeniden düzenleyerek bu bağımlılığı kaldırmanız gerekir. JCA bağlayıcı kullanılabiliyorsa JAR’leri sunucu sınıf yoluna eklemeniz ve kullanılabilmesi için gerekli yapılandırma dosyalarını WildFly sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.
Uygulamanız bir kaynak bağdaştırıcısına (RA) ihtiyaç duyuyorsa, bunun WildFly ile uyumlu olması gerekebilir. RA’yı sunucuya dağıtıp bunu doğru yapılandırın ve WildFly’ın tek başına örneğinde düzgün çalışıp çalışmadığını belirleyin. RA düzgün çalışıyorsa, JAR’leri Docker görüntüsünün sunucu sınıf yoluna eklemeniz ve kullanılabilmesi için gerekli yapılandırma dosyalarını WildFly sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.
Uygulamanız JAAS kullanıyorsa JAAS’nin nasıl yapılandırıldığını yakalamanız gerekir. Bir veritabanını kullanıyorsa bunu WildFly’da bir JAAS etki alanına dönüştürebilirsiniz. Bu bir özel uygulamaysa, bunun WildFly’da kullanılabileceğini doğrulamanız gerekir.
Yüksek kullanılabilirlik elde etmek için uygulamanızı büyük olasılıkla birden çok WebLogic sunucusunda dağıtmışsınızdır. Azure Kubernetes Service ölçeklendirme özelliğine sahiptir, ancak WebLogic Cluster API'sini kullandıysanız bu API'nin kullanımını ortadan kaldırmak için kodunuzu yeniden düzenlemeniz gerekir.
Kapsayıcı görüntülerinizi oluşturmadan önce uygulamanızı AKS’de kullanmak istediğiniz JDK ve WildFly sürümlerine geçirin. Uyumluluk ve performanstan emin olmak için uygulamayı kapsamlı olarak test edin.
Kayıt defterinde Hizmet Sorumlusunun Okuyucu rolüne sahip olduğu bir kapsayıcı kayıt defteri ve bir Azure Kubernetes kümesi oluşturmak için aşağıdaki komutları kullanın. Kümenizin ağ gereksinimleri için uygun ağ modelini seçtiğinizden emin olun.
az group create \
--resource-group $resourceGroup \
--location eastus
az acr create \
--resource-group $resourceGroup \
--name $acrName \
--sku Standard
az aks create \
--resource-group $resourceGroup \
--name $aksName \
--attach-acr $acrName \
--network-plugin azure
Dockerfile oluşturmak için aşağıdaki önkoşulları sağlamanız gerekir:
Ardından, uygun olan yerlerde aşağıdaki bölümlerde açıklanan adımları gerçekleştirebilirsiniz. Dockerfile ve web uygulamanız için başlangıç noktası olarak WildFly Kapsayıcısı Hızlı Başlangıç deposunu kullanabilirsiniz.
Azure KeyVault oluşturun ve tüm gerekli gizli dizileri doldurun. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma. Ardından söz konusu gizli dizileri podların erişimine açmak için KeyVault FlexVolume sürücüsünü yapılandırın.
WildFly’ı önyüklemek için kullanılan başlatma betiğini güncelleştirmeniz de gerekir. Sunucu başlatılmadan önce bu betiğin sertifikaları WildFly tarafından kullanılan anahtar deposuna içeri aktarması gerekir.
WildFly’ı bir veri kaynağına erişme amacıyla yapılandırmak için JDBC sürücüsü JAR’yi Docker görüntünüze ekleyip uygun JBoss CLI komutlarını yürütmeniz gerekir. Docker görüntünüz oluşturulurken bu komutların veri kaynağını ayarlaması gerekir.
Aşağıdaki adımlarda PostgreSQL, MySQL ve SQL Server’a yönelik yönergeler sunulur.
PostgreSQL, MySQL veya SQL Server’a yönelik JDBC sürücüsünü indirin.
Sürücü .jar dosyasını almak için indirilen arşivin paketini açın.
module.xml
gibi bir adı olan bir dosya oluşturup aşağıdaki biçimlendirmeyi ekleyin.
<module name>
yer tutucusunu (köşeli ayraçlarla birlikte) PostgreSQL için org.postgres
, MySQL için com.mysql
veya SQL Server için com.microsoft
ile değiştirin. Docker görüntünüzdeki (örneğin, <JDBC .jar file path>
öğesinde) dosyayı yerleştireceğiniz konuma ilişkin tam yolu da içerecek şekilde /opt/database
öğesini önceki adımdaki .jar dosyasının adıyla değiştirin.
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="<module name>">
<resources>
<resource-root path="<JDBC .jar file path>" />
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
datasource-commands.cli
gibi bir adı olan bir dosya oluşturup aşağıdaki kodu ekleyin.
<JDBC .jar file path>
öğesini önceki adımda kullandığınız değer ile değiştirin.
<module file path>
öğesini önceki adımdaki dosya adı ve yolu ile değiştirin (örneğin, /opt/database/module.xml
).
Not
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
batch
module add --name=org.postgres --resources=<JDBC .jar file path> --module-xml=<module file path>
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=postgres,driver-module-name=org.postgres,driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=$DATABASE_CONNECTION_URL --user-name=$DATABASE_SERVER_ADMIN_FULL_NAME --password=$DATABASE_SERVER_ADMIN_PASSWORD --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
reload
run batch
shutdown
Uygulamanıza yönelik JTA veri kaynağı yapılandırmasını güncelleştirin:
Uygulamanıza yönelik src/main/resources/META-INF/persistence.xml
dosyasını açıp <jta-data-source>
öğesini bulun. İçeriklerini aşağıda gösterildiği gibi değiştirin:
<jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
Docker görüntünüzü oluşturduğunuzda veri kaynağınızın oluşturulması için aşağıdakini Dockerfile
öğenize ekleyin
RUN /bin/bash -c '<WILDFLY_INSTALL_PATH>/bin/standalone.sh --start-mode admin-only &' && \
sleep 30 && \
<WILDFLY_INSTALL_PATH>/bin/jboss-cli.sh -c --file=/opt/database/datasource-commands.cli && \
sleep 30
Her veritabanı sunucusu için değişiklik gösterdiklerinden ve Azure portalındaki değerlerden farklı olduklarından, kullanacağınız DATABASE_CONNECTION_URL
değerini belirleyin. Burada gösterilen URL biçimleri WildFly’ın kullanılması için gereklidir:
jdbc:postgresql://<database server name>:5432/<database name>?ssl=true
Sonraki aşamalarda dağıtım YAML’nizi oluştururken şu ortam değişkenlerini (DATABASE_CONNECTION_URL
, DATABASE_SERVER_ADMIN_FULL_NAME
ve DATABASE_SERVER_ADMIN_PASSWORD
) uygun değerlerle geçirmeniz gerekir.
Not
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
WildFly ile veritabanı bağlantısını yapılandırma hakkında daha fazla bilgi edinmek için bkz. PostgreSQL, MySQL veya SQL Server.
WildFly’da yapılandırılması gereken her JNDI kaynağını ayarlamak için genelde aşağıdaki adımlar kullanılır:
Aşağıdaki örnekte, Azure Service Bus ile JMS bağlantısı kurulması için gerekli olan JNDI kaynağını oluşturmak için uygulanması gereken adımlar gösterilmektedir.
Apache Qpid JMS sağlayıcısını indirin
.jar dosyalarını almak için indirilen arşivin paketini açın.
module.xml
gibi bir adı olan bir dosya oluşturup /opt/servicebus
öğesine aşağıdaki biçimlendirmeyi ekleyin. JAR dosyalarının sürüm numaralarının önceki adımdaki JAR dosyalarının adlarıyla uyumlu olduğundan emin olun.
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.jboss.genericjms.provider">
<resources>
<resource-root path="proton-j-0.31.0.jar"/>
<resource-root path="qpid-jms-client-0.40.0.jar"/>
<resource-root path="slf4j-log4j12-1.7.25.jar"/>
<resource-root path="slf4j-api-1.7.25.jar"/>
<resource-root path="log4j-1.2.17.jar"/>
<resource-root path="netty-buffer-4.1.32.Final.jar" />
<resource-root path="netty-codec-4.1.32.Final.jar" />
<resource-root path="netty-codec-http-4.1.32.Final.jar" />
<resource-root path="netty-common-4.1.32.Final.jar" />
<resource-root path="netty-handler-4.1.32.Final.jar" />
<resource-root path="netty-resolver-4.1.32.Final.jar" />
<resource-root path="netty-transport-4.1.32.Final.jar" />
<resource-root path="netty-transport-native-epoll-4.1.32.Final-linux-x86_64.jar" />
<resource-root path="netty-transport-native-kqueue-4.1.32.Final-osx-x86_64.jar" />
<resource-root path="netty-transport-native-unix-common-4.1.32.Final.jar" />
<resource-root path="qpid-jms-discovery-0.40.0.jar" />
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.jms.api"/>
</dependencies>
</module>
jndi.properties
öğesinde bir /opt/servicebus
dosyası oluşturun.
connectionfactory.${MDB_CONNECTION_FACTORY}=amqps://${DEFAULT_SBNAMESPACE}.servicebus.windows.net?amqp.idleTimeout=120000&jms.username=${SB_SAS_POLICY}&jms.password=${SB_SAS_KEY}
queue.${MDB_QUEUE}=${SB_QUEUE}
topic.${MDB_TOPIC}=${SB_TOPIC}
servicebus-commands.cli
gibi bir adı olan bir dosya oluşturup aşağıdaki kodu ekleyin.
batch
/subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)
/system-property=property.mymdb.queue:add(value=myqueue)
/system-property=property.connection.factory:add(value=java:global/remoteJMS/SBF)
/subsystem=ee:list-add(name=global-modules, value={"name" => "org.jboss.genericjms.provider", "slot" =>"main"}
/subsystem=naming/binding="java:global/remoteJMS":add(binding-type=external-context,module=org.jboss.genericjms.provider,class=javax.naming.InitialContext,environment=[java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory,org.jboss.as.naming.lookup.by.string=true,java.naming.provider.url=/opt/servicebus/jndi.properties])
/subsystem=resource-adapters/resource-adapter=generic-ra:add(module=org.jboss.genericjms,transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd:add(class-name=org.jboss.resource.adapter.jms.JmsManagedConnectionFactory, jndi-name=java:/jms/${MDB_CONNECTION_FACTORY})
/subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd/config-properties=ConnectionFactory:add(value=${MDB_CONNECTION_FACTORY})
/subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd/config-properties=JndiParameters:add(value="java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory;java.naming.provider.url=/opt/servicebus/jndi.properties")
/subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd:write-attribute(name=security-application,value=true)
/subsystem=ejb3:write-attribute(name=default-resource-adapter-name, value=generic-ra)
run-batch
reload
shutdown
Docker görüntünüzü oluşturduğunuzda JNDI kaynağınızın oluşturulması için aşağıdakini Dockerfile
öğenize ekleyin
RUN /bin/bash -c '<WILDFLY_INSTALL_PATH>/bin/standalone.sh --start-mode admin-only &' && \
sleep 30 && \
<WILDFLY_INSTALL_PATH>/bin/jboss-cli.sh -c --file=/opt/servicebus/servicebus-commands.cli && \
sleep 30
Sonraki aşamalarda dağıtım YAML’nizi oluştururken şu ortam değişkenlerini (MDB_CONNECTION_FACTORY
, DEFAULT_SBNAMESPACE
ve SB_SAS_POLICY
, SB_SAS_KEY
, MDB_QUEUE
, SB_QUEUE
, MDB_TOPIC
ve SB_TOPIC
) uygun değerlerle geçirmeniz gerekir.
Önceki kılavuzda ele alınmayan geçiş öncesi adımlarını incelemek için WildFly Yönetici Kılavuzu’nu gözden geçirin.
Dockerfile dosyasını oluşturduktan sonra Docker görüntüsünü oluşturup bunu Azure Container Registry’de yayımlamanız gerekir.
WildFly Kapsayıcısı’na Hızlı Başlangıç GitHub depomuzu kullandıysanız, görüntünüzü oluşturup Azure Container Registry’ye gönderme işlemi aşağıdaki üç komutu çağırmaya denk gelir.
Bu örneklerde, MY_ACR
ortam değişkeni Azure Container Registry’nizin adını, MY_APP_NAME
değişkeni de Azure Container Registry’nizde kullanmak istediğiniz web uygulamasının adını taşır.
WAR dosyasını oluşturun:
mvn package
Azure Container Registry’de oturum açın:
az acr login --name ${MY_ACR}
Görüntüyü oluşturun ve gönderin:
az acr build --image ${MY_ACR}.azurecr.io/${MY_APP_NAME} --file src/main/docker/Dockerfile .
Alternatif olarak, aşağıdaki komutlarda gösterildiği gibi görüntüyü yerel olarak oluşturup test etmek için Docker CLI’yı kullanabilirsiniz. Bu yaklaşım ACR’ye ilk dağıtımdan önce görüntünün test edilmesini ve geliştirilmesini basitleştirebilir. Ancak, bunun için Docker CLI’yı yüklemeniz ve Docker daemon’ın çalıştığından emin olmanız gerekir.
Görüntüyü oluşturun:
docker build -t ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Görüntüyü yerel olarak çalıştırın:
docker run -it -p 8080:8080 ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Artık uygulamanıza http://localhost:8080
adresinde erişebilirsiniz.
Azure Container Registry’de oturum açın:
az acr login --name ${MY_ACR}
Görüntüyü Azure Container Registry’ye gönderin:
docker push ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Azure’da kapsayıcı görüntüsü oluşturma ve bunları depolama hakkında daha ayrıntılı bilgi edinmek için şu Learn modülüne bakın: Azure Container Registry ile kapsayıcı görüntüsü oluşturma ve depolama.
Uygulamanız iç veya sanal ağlarınızın dışından erişilebilir olacaksa, bir genel statik IP adresine ihtiyaç duyarsınız. Aşağıdaki örnekte gösterildiği gibi, bu IP adresini kümenizin düğüm kaynak grubunda sağlamanız gerekir:
export nodeResourceGroup=$(az aks show \
--resource-group $resourceGroup \
--name $aksName \
--query 'nodeResourceGroup' \
--output tsv)
export publicIp=$(az network public-ip create \
--resource-group $nodeResourceGroup \
--name applicationIp \
--sku Standard \
--allocation-method Static \
--query 'publicIp.ipAddress' \
--output tsv)
echo "Your public IP address is ${publicIp}."
Kubernetes YAML dosyaları oluşturma ve uygulama. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Kubernetes Service (AKS) kümesi dağıtma. Dış yük dengeleyici oluşturuyorsanız (uygulamanız veya bir giriş denetleyicisi için), LoadBalancerIP
olarak önceki bölümde sunulan IP adresini sağladığınızdan emin olun.
Dışsallaştırılmış parametreleri ortam değişkenleri olarak ekleyin. Daha fazla bilgi edinmek için bkz. Bir Kapsayıcı için Ortam Değişkenlerini Tanılama. Gizli dizileri (parolalar, API anahtarları ve JDBC bağlantı dizeleri gibi) eklemeyin. Bunlar aşağıdaki bölümde ele alınmıştır.
Kapsayıcılarınızın doğru şekilde boyutlandırılması için dağıtım YAML’sini oluştururken bellek ve CPU ayarlarını da eklediğinizden emin olun.
Uygulamanızda geçici olmayan depolama gerekiyorsa bir veya birden çok Kalıcı Birim yapılandırın.
Zamanlanan işleri AKS kümenizde yürütmek için gerektiği gibi Kubernetes CronJobs tanımlayın. Daha fazla bilgi edinmek için bkz. Bir CronJob ile Otomatikleştirilmiş Görev Çalıştırma.
Artık uygulamanızı Azure Kubernetes Service’e geçirdiğinize göre beklendiği gibi çalıştığını doğrulamalısınız. Bunu yaptıktan sonra uygulamanızı buluta daha yerel hale getirmek için aşağıdaki önerilere bakın.
Giriş denetleyicinize veya uygulama yük dengeleyicisine ayrılmış IP adresine DNS adı eklemeniz faydalı olabilir. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) giriş denetleyicisiyle TLS kullanma.
Uygulamanız için HELM grafikleri eklemeyi düşünebilirsiniz. Helm grafiği daha yüksek çeşitliliğe sahip bir müşteri kümesi tarafından kullanılmak ve özelleştirilmek üzere uygulama dağıtımınızı parametreleştirmenize olanak tanır.
DevOps stratejisini tasarlayın ve uygulayın. Güvenilirliği korurken geliştirme hızınızı da artırmak için Azure Pipelines ile dağıtımları ve testleri otomatikleştirmeyi düşünebilirsiniz. Daha fazla bilgi için bkz . Azure Pipelines ile Azure Kubernetes Service'i derleme ve dağıtma.
Küme için Azure İzleme’yi etkinleştirin. Daha fazla bilgi için bkz . Kubernetes kümeleri için izlemeyi etkinleştirme. Bu, Azure İzleyici’nin kapsayıcı günlüklerini toplama ve kullanımı izleme gibi işlemleri gerçekleştirmesine olanak tanır.
Prometheus aracılığıyla uygulamaya özgü ölçümleri kullanıma sunmayı düşünün. Prometheus, Kubernetes topluluğunda yaygın olarak benimsenen bir açık kaynak ölçüm çerçevesidir. Uygulamalarınızdan ölçüm toplamaya ve anormal koşullara otomatik yanıta veya durumu yükseltmeye olanak tanımak için kendi Prometheus sunucunuzu barındırmak yerine Azure İzleyici’de Prometheus Metrics atığını yapılandırabilirsiniz. Daha fazla bilgi için bkz . Prometheus ve Grafana'yı etkinleştirme.
İş sürekliliği ve olağanüstü durum kurtarma stratejisini tasarlayın ve uygulayın. Görev açısından kritik uygulamalar için çok bölgeli dağıtım mimarisi uygulamayı düşünebilirsiniz. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) için yüksek kullanılabilirliğe ve olağanüstü durum kurtarmaya genel bakış.
Kubernetes sürüm desteği ilkesini gözden geçirin. AKS kümenizi güncelleştirmeye devam edip her zaman desteklenen sürümü çalıştırdığından emin olmak sizin sorumluluğunuzdur. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) kümeleri için yükseltme seçenekleri.
Tüm ekip üyelerinin küme yönetiminden ve uygulama geliştirmeden sorumlu olmasını sağlayın, uygun AKS en iyi yöntemlerini gözden geçirin. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) üzerinde uygulama derlemek ve yönetmek için küme operatörü ve geliştirici en iyi yöntemleri.
Dağıtım dosyanızın sıralı güncelleştirmelerin nasıl gerçekleştirildiğini belirttiğinden emin olun. Daha fazla bilgi edinmek için Kubernetes belgelerinde Sıralı Güncelleştirme Dağıtımı bölümüne bakın.
Yoğun saatlerdeki yüklerin işlenmesi için otomatik ölçeklendirme özelliği ayarlayın. Daha fazla bilgi için bkz . Azure Kubernetes Service'te (AKS) küme otomatik ölçeklendiricisini kullanma.
Performansı daha da iyileştirmek için kod önbelleği boyutunu izlemeyi ve -XX:InitialCodeCacheSize
ve -XX:ReservedCodeCacheSize
JVM parametrelerini Dockerfile’a eklemeyi düşünebilirsiniz. Daha fazla bilgi edinmek için Oracle belgelerinde Kod önbelleğini ayarlama bölümüne bakın.
Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunEğitim
Modül
Java uygulamasını kapsayıcıya alma ve Azure'a dağıtma - Training
Java uygulamasını kapsayıcıya alma, kapsayıcı görüntüsünü Azure Container Registry'ye gönderme ve ardından Azure Kubernetes Service'e dağıtma.