Share via


Linux üzerinde ilk Java Service Fabric Reliable Actors uygulamanızı oluşturma

Bu hızlı başlangıç, bir Linux geliştirme ortamında ilk Azure Service Fabric Java uygulamanızı yalnızca birkaç dakikada oluşturmanıza yardımcı olur. İşlemi tamamladığınızda, yerel geliştirme kümesinde çalışan basit bir Java tek hizmet uygulamanız olacak.

Önkoşullar

Başlamadan önce, Service Fabric SDK, Service Fabric CLI ve Yeoman’ı yükleyin, Java geliştirme ortamını kurun ve Linux geliştirme ortamınızda bir geliştirme kümesi kurun. Mac OS X kullanıyorsanız, Docker kullanarak Mac üzerinde bir geliştirme ortamı ayarlayabilirsiniz.

Service Fabric CLI'sını da yükleyin.

Java için oluşturucuları yükleme ve ayarlama

Service Fabric, Yeoman şablon oluşturucu kullanarak terminalden Service Fabric Java uygulaması oluşturmanıza yardımcı olacak yapı iskelesi araçları sağlar. Yeoman zaten yüklü değilse, Yeoman’ı ayarlama hakkında yönergeler için bkz. Linux ile Service Fabric’i kullanmaya başlama. Java için Service Fabric Yeoman şablon oluşturucusunu yüklemek için şu komutu çalıştırın.

npm install -g generator-azuresfjava

Temel kavramlar

Reliable Actors hizmetini kullanmaya başlamak için anlamanız gereken birkaç temel kavram vardır:

  • Aktör hizmeti. Reliable Actors, Service Fabric altyapısında dağıtılabilen Reliable Services ile paketlenmiştir. Aktör örnekleri adlandırılmış hizmet örneğinde etkinleştirilir.

  • Aktör kaydı. Reliable Services gibi Reliable Actor hizmetinin de Service Fabric çalışma zamanıyla kaydedilmesi gerekir. Ayrıca aktör türü de Actor çalışma zamanına kaydedilmelidir.

  • Aktör arabirimi. Aktör arabirimi, bir aktörün baskın türdeki genel arabirimini tanımlamak için kullanılır. Reliable Actor model terminolojisinde aktör arabirimi, aktörün anlayıp işleyebileceği ileti türlerini tanımlamak için kullanılır. Aktör arabirimi diğer aktörler ve istemci uygulamaları tarafından aktöre ileti "göndermek" (zaman uyumsuz) amacıyla kullanılır. Reliable Actors birden fazla arabirim uygulayabilir.

  • ActorProxy sınıfı. ActorProxy sınıfı, istemci uygulamaları tarafından aktör arabirimi aracılığıyla kullanıma sunulan yöntemleri çağırmak için kullanılır. ActorProxy sınıfı iki önemli işlev sunar:

    • Ad çözümlemesi: Aktörü kümenin konumunu belirleyebilir (kümenin barındırıldığı düğümü bulabilir).
    • Hata işleme: Yöntem çağrılarını yeniden deneyebilir ve ardından aktör konumunu yeniden çözümleyebilir. Örnek olarak aktörün küme içindeki başka bir düğüme alınmasını gerektiren hata verilebilir.

Aktör arabirimlerinde geçerli olan önemli kurallar aşağıda verilmiştir:

  • Aktör arabirim yöntemlerine aşırı yükleme yapılamaz.
  • Aktör arabirimi yöntemleri çıkış, başvuru veya isteğe bağlı parametrelere sahip olmamalıdır.
  • Genel arabirimler desteklenmez.

Uygulama oluşturma

Service Fabric uygulaması bir veya birden çok hizmet içerir ve bu hizmetlerin her biri, uygulamanın işlevselliğini sunma konusunda belirli bir role sahiptir. Son bölümde yüklediğiniz oluşturucu, ilk hizmetinizi oluşturmayı ve daha sonra hizmet eklemeyi kolaylaştırır. Service Fabric Java uygulamalarını Eclipse’e yönelik bir eklentiyi kullanarak da oluşturabilir, derleyebilir ve dağıtabilirsiniz. Bkz. Eclipse kullanarak ilk Java uygulamanızı oluşturma ve dağıtma. Bu hızlı başlangıç için bir sayaç değerini alan ve depolayan tek bir hizmete sahip bir uygulama oluşturmak üzere Yeoman’ı kullanın.

  1. Bir terminal penceresinde yo azuresfjava yazın.
  2. Uygulamanızı adlandırın.
  3. Birinci hizmetinizin türünü seçin ve adlandırın. Bu öğretici için bir Reliable Actor Hizmeti seçin. Diğer hizmet türleri hakkında daha fazla bilgi edinmek için bkz. Service Fabric programlama modeline genel bakış. Java için Service Fabric Yeoman oluşturucusu

Uygulamaya "HelloWorldActorApplication", aktöre de "HelloWorldActor" adını verirseniz aşağıdaki yapı iskelesi oluşturulur:

HelloWorldActorApplication/
├── build.gradle
├── HelloWorldActor
│   ├── build.gradle
│   ├── settings.gradle
│   └── src
│       └── reliableactor
│           ├── HelloWorldActorHost.java
│           └── HelloWorldActorImpl.java
├── HelloWorldActorApplication
│   ├── ApplicationManifest.xml
│   └── HelloWorldActorPkg
│       ├── Code
│       │   ├── entryPoint.sh
│       │   └── _readme.txt
│       ├── Config
│       │   ├── _readme.txt
│       │   └── Settings.xml
│       ├── Data
│       │   └── _readme.txt
│       └── ServiceManifest.xml
├── HelloWorldActorInterface
│   ├── build.gradle
│   └── src
│       └── reliableactor
│           └── HelloWorldActor.java
├── HelloWorldActorTestClient
│   ├── build.gradle
│   ├── settings.gradle
│   ├── src
│   │   └── reliableactor
│   │       └── test
│   │           └── HelloWorldActorTestClient.java
│   └── testclient.sh
├── install.sh
├── settings.gradle
└── uninstall.sh

Reliable Actors temel parçaları

Önceki bölümlerde anlatılan temel kavramlar, Reliable Actor hizmetinin temel parçalarını oluşturur.

Aktör arabirimi

Aktör arabirimi tanımını içerir. Bu arabirim, aktör uygulaması ve aktörü çağıran istemciler tarafından paylaşılan aktör anlaşmasını tanımlar. Bu nedenle aktör uygulamasından ayrı bir yerde tanımlayıp birden fazla hizmet veya istemci uygulamasına paylaştırmak mantıklı bir yaklaşımdır.

HelloWorldActorInterface/src/reliableactor/HelloWorldActor.java:

public interface HelloWorldActor extends Actor {
    @Readonly   
    CompletableFuture<Integer> getCountAsync();

    CompletableFuture<?> setCountAsync(int count);
}

Aktör hizmeti

Aktör uygulamanızı ve aktör kayıt kodunu içerir. Aktör sınıfı aktör arabirimini uygular. Aktörünüz görevini burada yapar.

HelloWorldActor/src/reliableactor/HelloWorldActorImpl:

@ActorServiceAttribute(name = "HelloWorldActorService")
@StatePersistenceAttribute(statePersistence = StatePersistence.Persisted)
public class HelloWorldActorImpl extends FabricActor implements HelloWorldActor {
    private Logger logger = Logger.getLogger(this.getClass().getName());

    public HelloWorldActorImpl(FabricActorService actorService, ActorId actorId){
        super(actorService, actorId);
    }

    @Override
    protected CompletableFuture<?> onActivateAsync() {
        logger.log(Level.INFO, "onActivateAsync");

        return this.stateManager().tryAddStateAsync("count", 0);
    }

    @Override
    public CompletableFuture<Integer> getCountAsync() {
        logger.log(Level.INFO, "Getting current count value");
        return this.stateManager().getStateAsync("count");
    }

    @Override
    public CompletableFuture<?> setCountAsync(int count) {
        logger.log(Level.INFO, "Setting current count value {0}", count);
        return this.stateManager().addOrUpdateStateAsync("count", count, (key, value) -> count > value ? count : value);
    }
}

Aktör kaydı

Aktör hizmetinin Service Fabric çalışma zamanındaki bir hizmet türüne kaydedilmesi gerekir. Aktör hizmetinin aktör örneklerinizi çalıştırması için aktör türünüzün de aktör hizmetine kaydedilmesi gerekir. ActorRuntime kayıt yöntemi bu işi aktörlerin yerine gerçekleştirir.

HelloWorldActor/src/reliableactor/HelloWorldActorHost:

public class HelloWorldActorHost {

private static final Logger logger = Logger.getLogger(HelloWorldActorHost.class.getName());

public static void main(String[] args) throws Exception {

        try {

            ActorRuntime.registerActorAsync(HelloWorldActorImpl.class, (context, actorType) -> new FabricActorService(context, actorType, (a,b)-> new HelloWorldActorImpl(a,b)), Duration.ofSeconds(10));
            Thread.sleep(Long.MAX_VALUE);
        } catch (Exception e) {
            logger.log(Level.SEVERE, "Exception occurred", e);
            throw e;
        }
    }
}

Uygulama oluşturma

Service Fabric Yeoman şablonları, uygulamayı terminalden oluşturmak için kullanabileceğiniz bir Gradle derleme betiği içerir. Service Fabric Java bağımlılıkları Maven’dan alınır. Service Fabric Java uygulamalarını oluşturmak ve çalışmak için JDK ve Gradle’ın yüklü olduğundan emin olmanız gerekir. Yüklü değillerse, JDK ve Gradle’ı yükleme hakkında yönergeler için bkz. Linux ile Service Fabric’i kullanmaya başlama.

Uygulamayı derlemek ve paketlemek için şu komutu çalıştırın:

cd HelloWorldActorApplication
gradle

Uygulamayı dağıtma

Uygulama oluşturulduktan sonra uygulamayı yerel kümeye dağıtabilirsiniz.

  1. Yerel Service Fabric kümesine bağlanın (kümenin kurulu ve çalışıyor olması gerekir).

    sfctl cluster select --endpoint http://localhost:19080
    
  2. Uygulama paketini kümenin görüntü deposuna kopyalamak, uygulama türünü kaydetmek ve uygulamanın bir örneğini oluşturmak için şablonda verilen yükleme betiğini çalıştırın.

    ./install.sh
    

Oluşturulan uygulamayı dağıtma işlemi, diğer tüm Service Fabric uygulamalarında olduğu gibidir. Ayrıntılı yönergeler için Service Fabric uygulamasını Service Fabric CLI ile yönetme ile ilgili belgelere bakın.

Bu komutların parametreleri, uygulama paketi içinde oluşturulmuş bildirimlerde bulunabilir.

Uygulama dağıtıldığında bir tarayıcı açın ve http://localhost:19080/Explorer konumundaki Service Fabric Explorer'a gidin. Ardından, Uygulamalar düğümünü genişletin ve geçerli olarak uygulamanızın türü için bir giriş ve bu türün ilk örneği için başka bir giriş olduğuna dikkat edin.

Önemli

Uygulamayı Azure'da güvenli bir Linux kümesine dağıtmak için, uygulamanızı Service Fabric çalışma zamanıyla doğrulayacak bir sertifika yapılandırmanız gerekir. Bunu yaptığınızda Reliable Actors hizmetlerinizin temel alınan Service Fabric çalışma zamanı API'leriyle iletişim kurması mümkün olur. Daha fazla bilgi edinmek için bkz . Reliable Services uygulamasını Linux kümelerinde çalışacak şekilde yapılandırma.

Test istemcisini başlatma ve yük devre gerçekleştirme

Aktörler kendi başına hiçbir şey yapmaz; başka bir hizmet veya istemcinin aktörlere ileti göndermesini gerektirir. Actor şablonu, actor hizmetiyle etkileşim kurmak üzere kullanabileceğiniz basit bir test betiği içerir.

Not

Test istemcisi actors ile iletişim kurmak için ActorProxy sınıfını kullanır. Bu sınıfın aktör hizmetiyle aynı kümede çalışması veya aynı IP adresi alanını paylaşması gerekir. Test istemcisini yerel geliştirme kümesiyle aynı bilgisayarda çalıştırabilirsiniz. Ancak uzak kümedeki aktörlerle iletişim kurmak için, kümede aktörlerle dış iletişimi işleyen bir ağ geçidi dağıtmanız gerekir.

  1. Actor hizmetinin çıktısını görmek için izleme yardımcı programını kullanarak betiği çalıştırın. Test betiği bir sayacın değerini yükseltmek için aktörde setCountAsync() yöntemine; yeni sayaç değerini edinmek içinse aktörde getCountAsync() yöntemine çağrı yapar ve bu değeri konsolda görüntüler.

    MAC OS X olması durumunda, aşağıdaki ek komutları çalıştırarak HelloWorldTestClient klasörünü kapsayıcının içindeki bir konuma kopyalamanız gerekir.

     docker cp HelloWorldTestClient [first-four-digits-of-container-ID]:/home
     docker exec -it [first-four-digits-of-container-ID] /bin/bash
     cd /home
    
    cd HelloWorldActorTestClient
    watch -n 1 ./testclient.sh
    
  2. Service Fabric Explorer’da actor hizmetinin birincil çoğaltmasını barındıran düğümü bulun. Aşağıdaki ekran görüntüsünde düğüm 3’tür. Birincil hizmet çoğaltması okuma ve yazma işlemlerini işler. Hizmet durumundaki değişiklikler daha sonra aşağıdaki ekran görüntüsünde 0 ve 1 düğümlerinde çalıştırılarak ikincil çoğaltmalara çoğaltılır.

    Service Fabric Explorer’da birincil çoğaltmayı bulma

  3. Düğümler’de, önceki adımda bulduğunuz düğüme tıklayın ve Eylemler menüsünden Devre dışı bırak (yeniden başlat) öğesini seçin. Bu eylem, birincil hizmet çoğaltmasını çalıştıran düğümü yeniden başlatır ve başka bir düğümde çalışan ikincil çoğaltmalardan birine yük devretmeyi zorlar. Bu ikincil çoğaltma birincil konumuna yükseltilir, farklı bir düğümde başka bir ikincil çoğaltma oluşturulur ve birincil çoğaltma okuma/yazma işlemleri almaya başlar. Düğüm yeniden başlatılırken test istemcisinin çıktısına dikkat edin ve yük devretmeye rağmen sayacın artmaya devam ettiğini gözlemleyin.

Uygulamayı kaldırma

Uygulama örneğini silmek, uygulama paketinin kaydını silmek ve uygulama paketini kümenin görüntü deposundan kaldırmak için şablonda sağlanan kaldırma betiğini kullanın.

./uninstall.sh

Service Fabric Explorer’da uygulamanın ve uygulama türünün artık Uygulamalar düğümünde olmadığını görürsünüz.

Maven'da Service Fabric Java kitaplıkları

Maven’da barındırılan Service Fabric Java kitaplıkları. Projelerinizin mavenCentral’daki Service Fabric Java kitaplıklarını kullanması için pom.xml veya build.gradle altına bağımlılıklar ekleyebilirsiniz.

Aktörler

Uygulamanız için Service Fabric Güvenilir Aktör desteği.

<dependency>
    <groupId>com.microsoft.servicefabric</groupId>
    <artifactId>sf-actors</artifactId>
    <version>1.0.0</version>
</dependency>
repositories {
    mavenCentral()
}
dependencies {
    compile 'com.microsoft.servicefabric:sf-actors:1.0.0'
}

Hizmetler

Uygulamanız için Service Fabric Reliable Services desteği.

<dependency>
    <groupId>com.microsoft.servicefabric</groupId>
    <artifactId>sf-services</artifactId>
    <version>1.0.0</version>
</dependency>
repositories {
    mavenCentral()
}
dependencies {
    compile 'com.microsoft.servicefabric:sf-services:1.0.0'
}

Diğer

Aktarım

Service Fabric Java uygulaması için Aktarım katmanı desteği. Aktarım katmanında özellikle programlamadığınız sürece bu bağımlılığı Güvenilir Aktör veya Hizmet uygulamalarınız için özellikle eklemeniz gerekmez.

<dependency>
    <groupId>com.microsoft.servicefabric</groupId>
    <artifactId>sf-transport</artifactId>
    <version>1.0.0</version>
</dependency>
repositories {
    mavenCentral()
}
dependencies {
    compile 'com.microsoft.servicefabric:sf-transport:1.0.0'
}

Fabric desteği

Yerel Service Fabric çalışma zamanıyla iletişim kuran Service Fabric için sistem düzeyinde destek. Bu bağımlılığı Güvenilir Aktör veya Hizmet uygulamalarınız için özellikle eklemeniz gerekmez. Yukarıdaki diğer bağımlılıkları eklediğinizde bu otomatik olarak Maven’dan alınır.

<dependency>
    <groupId>com.microsoft.servicefabric</groupId>
    <artifactId>sf</artifactId>
    <version>1.0.0</version>
</dependency>
repositories {
    mavenCentral()
}
dependencies {
    compile 'com.microsoft.servicefabric:sf:1.0.0'
}

Sonraki adımlar