Megosztás a következőn keresztül:


Szolgáltatás-átnevezés a Javában a Reliable Services használatával

Az olyan szolgáltatások esetében, amelyek nem kapcsolódnak egy adott kommunikációs protokollhoz vagy veremhez, például a WebAPI-hoz, a Windows Communication Foundationhez (WCF) vagy más szolgáltatásokhoz, a Reliable Services keretrendszer egy újraegyeztetési mechanizmust biztosít a szolgáltatások távoli eljáráshívásainak gyors és egyszerű beállításához. Ez a cikk a Java használatával írt szolgáltatások távoli eljáráshívásainak beállítását ismerteti.

Szolgáltatáson való újraegyenlítés beállítása

A szolgáltatás újraindításának beállítása két egyszerű lépésben történik:

  1. Hozzon létre egy felületet a szolgáltatás implementálásához. Ez a felület határozza meg a távoli eljáráshívásokhoz elérhető metódusokat a szolgáltatásban. A metódusnak feladatvisszaadó aszinkron metódusnak kell lennie. Az interfésznek implementálnia microsoft.serviceFabric.services.remoting.Service kell, hogy jelezhesse, hogy a szolgáltatás rendelkezik visszakapcsoló felülettel.
  2. Használjon egy átnevezési figyelőt a szolgáltatásban. Ez egy CommunicationListener olyan implementáció, amely újraegyeztetési képességeket biztosít. FabricTransportServiceRemotingListener az alapértelmezett újraegyenlítési átviteli protokoll használatával létrehozható egy újraindító figyelő.

Az alábbi állapot nélküli szolgáltatás például egyetlen metódust tesz elérhetővé a ""Helló világ!" alkalmazás" távoli eljáráshíváson keresztüli lekéréséhez.

import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.List;
import microsoft.servicefabric.services.communication.runtime.ServiceInstanceListener;
import microsoft.servicefabric.services.remoting.Service;
import microsoft.servicefabric.services.runtime.StatelessService;

public interface MyService extends Service {
    CompletableFuture<String> helloWorldAsync();
}

class MyServiceImpl extends StatelessService implements MyService {
    public MyServiceImpl(StatelessServiceContext context) {
       super(context);
    }

    public CompletableFuture<String> helloWorldAsync() {
        return CompletableFuture.completedFuture("Hello!");
    }

    @Override
    protected List<ServiceInstanceListener> createServiceInstanceListeners() {
        ArrayList<ServiceInstanceListener> listeners = new ArrayList<>();
        listeners.add(new ServiceInstanceListener((context) -> {
            return new FabricTransportServiceRemotingListener(context,this);
        }));
        return listeners;
    }
}

Megjegyzés

A szolgáltatásfelület argumentumai és visszatérési típusai lehetnek egyszerű, összetett vagy egyéni típusok, de szerializálhatóknak kell lenniük.

Távoli szolgáltatás metódusának hívása

A szolgáltatás metódusainak hívása a hívási verem használatával történik egy helyi proxyval a szolgáltatáshoz az microsoft.serviceFabric.services.remoting.client.ServiceProxyBase osztályon keresztül. A ServiceProxyBase metódus a szolgáltatás által implementálható felülettel hoz létre helyi proxyt. Ezzel a proxyval egyszerűen meghívhat metódusokat a felületen távolról.


MyService helloWorldClient = ServiceProxyBase.create(MyService.class, new URI("fabric:/MyApplication/MyHelloWorldService"));

CompletableFuture<String> message = helloWorldClient.helloWorldAsync();

A újraegyeztetési keretrendszer propagálja a szolgáltatásra vonatkozó kivételeket az ügyfélnek. Így a kivételkezelési logika az ügyfélen az használatával ServiceProxyBase közvetlenül kezelheti a szolgáltatás által okozott kivételeket.

Szolgáltatásproxy élettartama

A ServiceProxy létrehozása egyszerű művelet, így tetszőleges számúat hozhat létre. A szolgáltatásproxy-példányok mindaddig újra felhasználhatók, amíg szükség van rájuk. Ha egy távoli eljáráshívás kivételt jelez, továbbra is használhatja ugyanazt a proxypéldányt. Minden ServiceProxy tartalmaz egy kommunikációs ügyfelet, amellyel üzeneteket küldhet a hálózaton keresztül. Távoli hívások meghívása közben belső ellenőrzéseket hajt végre annak megállapításához, hogy a kommunikációs ügyfél érvényes-e. Az ellenőrzések eredményei alapján a kommunikációs ügyfél szükség esetén újra létrejön. Ezért kivétel esetén nem kell újból létrehoznia ServiceProxya következőt: .

ServiceProxyFactory élettartama

A FabricServiceProxyFactory egy olyan gyár, amely proxyt hoz létre a különböző távelérési felületekhez. Ha AZ API-t ServiceProxyBase.create használja a proxy létrehozásához, akkor a keretrendszer létrehoz egy FabricServiceProxyFactory. Hasznos manuálisan létrehozni egyet, ha felül kell bírálnia a ServiceRemotingClientFactory tulajdonságait. A gyár költséges művelet. FabricServiceProxyFactory fenntartja a kommunikációs ügyfelek gyorsítótárát. Az ajánlott eljárás a gyorsítótárazás FabricServiceProxyFactory a lehető leghosszabb ideig.

Kivételkezelés törlése

A szolgáltatás API által okozott összes távoli kivételt a rendszer RuntimeException vagy FabricException kivételként küldi vissza az ügyfélnek.

A ServiceProxy kezeli a létrehozott szolgáltatáspartíció feladatátvételi kivételét. Újra feloldja a végpontokat, ha feladatátvételi kivételek (nem átmeneti kivételek) vannak, és újrapróbálja a hívást a megfelelő végponttal. A feladatátvételi kivétel újrapróbálkozások száma határozatlan. TransientExceptions esetén csak újrapróbálkozás a hívással.

Az alapértelmezett újrapróbálkozási paramétereket az OperationRetrySettings állítja elő. Ezeket az értékeket úgy konfigurálhatja, hogy átadja az OperationRetrySettings objektumot a ServiceProxyFactory konstruktornak.

Következő lépések