service bus Arşiv

Workflow Manager Server Migration

Workflow Manager Server yüksek ölçekli, yüksek yoğunluklu iş akışlarını barındırmak için kullanılmakta olan bir teknolojidir. Bildirim tabanlı (declarative) bir modelde geliştirme yapmanıza izin verir. Yani geliştirdiğiniz iş akışlarında kod barınmaz, sadece deklerasyonları barınır. Arka plan sistemleri ile servisler üzerinden haberleşerek iş mantığının akışa uygulanması amaçlanır. Microsoft .Net Framework 4.5 ve Windows Workflow Foundation üzerinde inşa edilmiştir.

Workflow Manager’ın genel kullanımı Microsoft SharePoint Server üzerinde SharePoint Workflow’larını çalıştırmaya yöneliktir. Aslında Workflow Manager, SharePoint için yaratılmış bir yapı değildir ancak genel kullanımına baktığımızda ağırlıklı olarak SharePoint ürünü ile beraber kullanıldığını gözlemliyoruz.

Topolojik olarak bir farm mantığında çalışır. Yani tıpkı SharePoint veya Exchange Server farmlarında olduğu gibi ilk sunucu kurulumundan sonra bir farm yapılandırması gerçekleştirirsiniz. Ardından yeni sunucular üzerinde de uygulama kurulumlarını yaparak oluşturduğunuz bu farma ekleyebilirsiniz. SharePoint özelinde bahsedecek olursak, ayrı bir sunucu olmadan doğrudan SharePoint Server kurulu olan sunuculara da kurulum gerçekleştirebilirsiniz. (Ancak önerilmez)

Workflow Manager hakkında kısa bir özetten sonra bu yazıda değinmek istediğim konuya gelmek isterim. Tüm sunucu uygulamalarında olabileceği gibi farklı nedenlerle Workflow Manager’I da mevcutta konfigüre edildiği sunucu üzerinden farklı bir ortama taşımak isteyebilirsiniz. Nedenleriniz aşağıdakilerden biri olabilir;

  • Mevcut ortamda yaşanan sıkıntılar sonrasında in-place düzeltme işlemlerini yapamıyor ve yeniden kurulum yapmak istiyor olabilirsiniz.
  • Alınan mimari bir karar sonrası Workflow Manager’I ayrı bir farm olarak değerlendirmek istiyor olabilirsiniz.
  • Bir felaket senaryosu sonrası elinizde sadece güncel Workflow Manager veritabanları kalmış olabilir ve yeni bir yapılandırma ile çalışmalarınıza devam etmek istiyor olabilirsiniz.
  • Kurulu bulunan ortamda Windows upgrade, domain upgrade/change, vb sistemsel altyapı çalışmaları yapılacak olması sebebiyle konfigürasyonu yenilemek istiyor olabilirsiniz.

Bu nedenleri artırmak mümkün. Temel olarak bir uygulamanın yeniden kurulması ve konfigüre edilmesi çok ciddi bir sorun gibi görünmüyor. Ancak sözkonusu olan iş akışlarını barındıran Workflow Manager gibi bir yapı olduğunda önemli olan konulardan biri de iş sürekliliği. Mevcut kurulumunu üzerinde yaygınlaştırılmış olan onlarca iş akışınız ve bu iş akışlarının SharePoint liste ve kütüphaneleri ile ilişkili binlerce devam örneği (instance) olabilir. Elbette ne tüm akışlarınızı yeniden yaygınlaştırmak isteyeceksiniz ne de devam eden örnekleri kaybedip tüm örnekleri yeniden başlatmayı. Bu noktada sağlıklı bir ortam kurmak ve mevcut yapının bu ortam üzerinde devam eden örnekleri ile beraber çalışmasını sağlamak önem taşıyor.

Bu işlemi gerçekleştirmek için öncelikle ön gereksinimlerimizi tanımlamamız gerekiyor.

Hata: Maximum allowed Correlation Filter have been reached or exceeded

Geliştirmesini yaptığınız workflowlarda yoğun kullanımlar sonrası aşağıdaki gibi bir hata ile karşılaşabilirsiniz.

Exception command text: [dbo].[PerformBatchOperations], exception = Microsoft.ServiceBus.Messaging.QuotaExceededException: The number of maximum allowed CorrelationFilter have been reached or exceeded. Number of filters:100001, Max number of filters allowed: 100000.

Hatadan da anlaşılacağı üzere bu bir sorundan ziyade bir limitlemeye takıldığınız anlamını içerir. Sorunun çözümü için aşağıdaki adımları uygulamanız yeterli olacaktır.

  • Service Bus Farm’ı stop edin. Bu işlem için “Stop-SBFarm” PowerShell komutunu kullanabilirsiniz.
  • Limiti yükseltin. Bu işlem için “Set-SBRuntimeSetting -Name MaximumNumberOfCorrelationFiltersPerTopic -Value 1000000” PowerShell komutunu kullanabilirsiniz.
  • Veritabanı yöneticinizi açın ve SBMessageContainer01 veritabanında bir sorgu çalıştırın “UPDATE TopicsTable SET MaxCorrelationFilters = 1000000
  • Service Bu Farm’ı yeniden başlatın. Bu işlem için “Start-SBFarm” PowerShell komutunu kullanabilirsiniz.

PowerShell komutları için hem Service Bus PowerShell ekranını hem de Workflow Manager PowerShell ekranını kullanabilirsiniz.