15 Aralık 2022 Perşembe

HazelcastClientAPI ClientInvocation Sınıfı - Client Tarafındaki Invocation

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;
}
invokeOnSelection metodu
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

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt