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:
- 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. - 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 ServiceProxy
a 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.