Komunikacja zdalna usługi w języku Java za pomocą usług Reliable Services
W przypadku usług, które nie są powiązane z określonym protokołem komunikacyjnym lub stosem, takimi jak WebAPI, Windows Communication Foundation (WCF) lub inne usługi, platforma Reliable Services zapewnia mechanizm komunikacji zdalnej umożliwiający szybkie i łatwe konfigurowanie wywołań procedur zdalnych dla usług. W tym artykule omówiono sposób konfigurowania zdalnych wywołań procedur dla usług napisanych za pomocą języka Java.
Konfigurowanie komunikacji zdalniej w usłudze
Konfigurowanie komunikacji zdalnej dla usługi odbywa się w dwóch prostych krokach:
- Utwórz interfejs do zaimplementowania usługi. Ten interfejs definiuje metody, które są dostępne dla zdalnego wywołania procedury w usłudze. Metody muszą zwracać metody asynchroniczne. Interfejs musi implementować
microsoft.serviceFabric.services.remoting.Service
, aby zasygnalizować, że usługa ma interfejs komunikacji zdalniej. - Użyj odbiornika komunikacji zdalniej w usłudze. Jest to implementacja
CommunicationListener
, która zapewnia możliwości komunikacji zdalniej.FabricTransportServiceRemotingListener
można użyć do utworzenia odbiornika komunikacji zdalniej przy użyciu domyślnego protokołu transportu komunikacji zdalniej.
Na przykład następująca usługa bezstanowa uwidacznia pojedynczą metodę pobierania "Hello world" za pośrednictwem zdalnego wywołania procedury.
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;
}
}
Uwaga
Argumenty i typy zwracane w interfejsie usługi mogą być dowolnymi prostymi, złożonymi lub niestandardowymi typami, ale muszą być serializowalne.
Wywoływanie metod usługi zdalnej
Wywoływanie metod w usłudze przy użyciu stosu komunikacji telefonicznej odbywa się przy użyciu lokalnego serwera proxy do usługi za pośrednictwem microsoft.serviceFabric.services.remoting.client.ServiceProxyBase
klasy . Metoda ServiceProxyBase
tworzy lokalny serwer proxy przy użyciu tego samego interfejsu, który implementuje usługa. Za pomocą tego serwera proxy można po prostu zdalnie wywoływać metody w interfejsie.
MyService helloWorldClient = ServiceProxyBase.create(MyService.class, new URI("fabric:/MyApplication/MyHelloWorldService"));
CompletableFuture<String> message = helloWorldClient.helloWorldAsync();
Platforma komunikacji zdalnie propaguje wyjątki zgłaszane do usługi do klienta. W związku z tym logika obsługi wyjątków na kliencie przy użyciu metody ServiceProxyBase
może bezpośrednio obsługiwać wyjątki zgłaszane przez usługę.
Okres istnienia serwera proxy usługi
Tworzenie elementu ServiceProxy to uproszczona operacja, dzięki czemu można utworzyć dowolną liczbę operacji. Wystąpienia serwera proxy usługi można używać ponownie, o ile są potrzebne. Jeśli wywołanie procedury zdalnej zgłasza wyjątek, nadal można ponownie użyć tego samego wystąpienia serwera proxy. Każdy element ServiceProxy zawiera klienta komunikacji używanego do wysyłania komunikatów za pośrednictwem przewodu. Podczas wywoływania wywołań zdalnych wykonywane są wewnętrzne kontrole w celu określenia, czy klient komunikacji jest prawidłowy. Na podstawie wyników tych testów klient komunikacji jest odtwarzany w razie potrzeby. W związku z tym, jeśli wystąpi wyjątek, nie trzeba ponownie utworzyć ServiceProxy
elementu .
Okres istnienia usługi ServiceProxyFactory
FabricServiceProxyFactory to fabryka, która tworzy serwer proxy dla różnych interfejsów komunikacji wirtualnej. Jeśli używasz interfejsu API ServiceProxyBase.create
do tworzenia serwera proxy, platforma tworzy element FabricServiceProxyFactory
.
Warto utworzyć jedną ręcznie, gdy trzeba zastąpić właściwości ServiceRemotingClientFactory .
Fabryka jest kosztowną operacją. FabricServiceProxyFactory
przechowuje pamięć podręczną klientów komunikacji.
Najlepszym rozwiązaniem jest buforowanie FabricServiceProxyFactory
tak długo, jak to możliwe.
Obsługa wyjątków komunikacji zdalnej
Wszystkie wyjątki zdalne zgłaszane przez interfejs API usługi są wysyłane z powrotem do klienta jako RuntimeException lub FabricException.
Usługa ServiceProxy obsługuje wszystkie wyjątki trybu failover dla partycji usługi, dla których została utworzona. Spowoduje to ponowne rozwiązanie punktów końcowych w przypadku wyjątków trybu failover (wyjątków innych niż przejściowe) i ponawia próbę wywołania z poprawnym punktem końcowym. Liczba ponownych prób dla wyjątku trybu failover jest nieokreślony. W przypadku wyjąteku TransientExceptions tylko ponawia próbę wywołania.
Domyślne parametry ponawiania prób są wyzwalane przez element OperationRetrySettings. Te wartości można skonfigurować, przekazując obiekt OperationRetrySettings do konstruktora ServiceProxyFactory.
Następne kroki
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla