Giriş
Şu satırı dahil ederiz
import com.hazelcast.client.impl.spi.impl.ClientInvocation;
Kalıtım şöyle
Kalıtım şöyle
BaseInvocation
MasterInvocation
PartitionInvocation
RaftInvocation
TargetInvocation
allowRetryOnRandom Alanı
Varsayılan değeri true. Dolayısıyla client bir member'a çağrıda bulunur ancak başarısız olursa, tekrar dener ama bu sefer hedef olarak rastgele bir başka member'ı kullanır
disallowRetryOnRandom metodu
allowRetryOnRandom alanına false değerini atar.
invoke metodu
Metod şöyle. Burada bir Future döndürülüyor.
public ClientInvocationFuture invoke() {clientMessage.setCorrelationId(callIdSequence.next());invokeOnSelection();return clientInvocationFuture;}
Metod şöyle. Detaylar önemli değil. Sonuçta çağrı invocationService nesnesine geçiliyor ve callback için invocationService nesnesine "this" ile kendisini veriyor.
private void invokeOnSelection() { ... if (isSmartRoutingEnabled) { if (partitionId != -1) { invoked = invocationService.invokeOnPartitionOwner(this, partitionId); } else if (uuid != null) { invoked = invocationService.invokeOnTarget(this, uuid); } else { invoked = invocationService.invoke(this); } ... } else { invoked = invocationService.invoke(this); } ... }
shouldRetry metodu
Metod şöyle. Eğer TargetDisconnectedException gelirse client procotol'de bu çağrı retryable olarak işaretli ise tekrar dener.
private boolean shouldRetry(Throwable t) { if (t instanceof InvocationMightContainCompactDataException) { return true; } if (isBindToSingleConnection() && (t instanceof IOException || t instanceof TargetDisconnectedException)) { return false; } if (uuid != null && t instanceof TargetNotMemberException) { //when invocation send to a specific member //if target is no longer a member, we should not retry //note that this exception could come from the server return false; } if (t instanceof IOException || t instanceof HazelcastInstanceNotActiveException || t instanceof RetryableException) { return true; } if (t instanceof TargetDisconnectedException) { return clientMessage.isRetryable() || invocationService.isRedoOperation(); } return false; }
Hiç yorum yok:
Yorum Gönder