retryWhen() এর মাধ্যমে Custom Retry Logic

Error Handling Operators - আরএক্সজেএস (RxJS) - Web Development

352

RxJS (Reactive Extensions for JavaScript) একটি শক্তিশালী লাইব্রেরি যা অ্যাসিঙ্ক্রোনাস ডেটা স্ট্রিম এবং ইভেন্টগুলোকে কার্যকরভাবে পরিচালনা করতে সহায়ক। অনেক সময় আমাদের API কল বা অন্যান্য অ্যাসিঙ্ক্রোনাস কাজগুলিতে retry করার প্রয়োজন হয়, যেমন যখন কোনো ইরর (error) ঘটে তখন কিছু নির্দিষ্ট শর্তে পুনরায় চেষ্টা করতে হবে। এই কাজটি retryWhen() মেথড ব্যবহার করে Custom Retry Logic তৈরি করা যায়।

retryWhen() অপারেটরটি একটি Observable প্রদান করে, যা একটি ত্রুটি (error) হলে পুনরায় চেষ্টা করার কৌশল নির্ধারণ করতে সহায়তা করে।


retryWhen() কী?

retryWhen() একটি RxJS অপারেটর যা সাবস্ক্রাইবারের সাবস্ক্রিপশনকে পুনরায় শুরু করার জন্য custom retry strategy নির্ধারণ করতে ব্যবহৃত হয়। এটি একটি Observable গ্রহণ করে এবং যদি ত্রুটি ঘটে তবে সেই Observable থেকে পুনরায় চেষ্টা করার নির্দেশনা দেয়। retryWhen() সাধারণত একটি Observable প্রদান করে যা আবার ট্রাই করার জন্য পুনরায় চেষ্টার সময়সূচী এবং কৌশল নির্ধারণ করে।


retryWhen() এর ব্যবহার

retryWhen() অপারেটরের সাথে একটি কাস্টম retry strategy তৈরি করা যায়, যেখানে ইররের ঘটনার পরে কীভাবে আবার রিকোয়েস্ট করা হবে তা নির্ধারণ করা হয়। সাধারণত এটি একটি observable যা ত্রুটি ঘটলে পুনরায় চেষ্টা করার জন্য নির্দিষ্ট সময় বা কন্ডিশন নির্ধারণ করে।

উদাহরণ:

ধরা যাক, আমরা একটি HTTP রিকোয়েস্ট পাঠাচ্ছি, এবং যদি প্রথমে ত্রুটি ঘটে, তবে আমরা কাস্টম রিট্রি স্ট্র্যাটেজি ব্যবহার করে আবার চেষ্টা করতে চাই।

import { of } from 'rxjs';
import { retryWhen, delay, take, mergeMap } from 'rxjs/operators';

// একটি কাস্টম Observable যা আমাদের সিমুলেটেড API কলের মতো কাজ করবে
function makeApiCall() {
  return Math.random() > 0.5 ? of('Success') : throw new Error('API Call Failed');
}

// Retry Logic
const observable = makeApiCall().pipe(
  retryWhen(errors => 
    errors.pipe(
      mergeMap((error, index) => {
        if (index < 3) {
          console.log(`Attempt ${index + 1}: Retrying after error - ${error.message}`);
          return of(error).pipe(delay(1000)); // ১ সেকেন্ড পর পুনরায় চেষ্টা করবে
        }
        return throw error; // ৩ বার চেষ্টা করার পরও ইরর হলে ত্রুটি ছুড়ে দিবে
      })
    )
  )
);

observable.subscribe({
  next: result => console.log(result),
  error: err => console.log('Final Error:', err)
});

কোড বিশ্লেষণ:

  1. makeApiCall() ফাংশন একটি র্যান্ডম ৫০% সাকসেস রেটের সাথে একটি API কল সিমুলেট করে। যদি Math.random() > 0.5 হয় তবে এটি সফল হয়, অন্যথায় এটি একটি ত্রুটি ছুড়ে দেয়।
  2. retryWhen() অপারেটরটি ত্রুটি ঘটলে পুনরায় চেষ্টা করার জন্য একটি কাস্টম লজিক নিয়ন্ত্রণ করে। এখানে আমরা ত্রুটি হলে প্রতি ১ সেকেন্ড পর তিনবার চেষ্টা করার নির্দেশ দিচ্ছি।
  3. mergeMap অপারেটরটি ব্যবহৃত হয়েছে, যা পুনরায় চেষ্টা করার জন্য নির্দিষ্ট সময় সেট করে এবং চেষ্টা সংখ্যা অনুযায়ী সিদ্ধান্ত নেয়।
  4. throw error ব্যবহার করা হয়েছে যখন ৩ বার চেষ্টা করার পরও সফল না হয়।

retryWhen() এর মাধ্যমে বিভিন্ন ধরনের Retry Logic

retryWhen() এর মাধ্যমে বিভিন্ন কৌশলে কাস্টম retry logic তৈরি করা যায়। কিছু সাধারণ কৌশল হলো:

  1. Fixed Interval Retry: প্রতিবার ইররের পরে নির্দিষ্ট সময়ের ব্যবধানে পুনরায় চেষ্টা করা।
  2. Exponential Backoff: একের পর এক রিট্রাইয়ের জন্য সময় বাড়িয়ে নেওয়া।
  3. Max Retry Attempts: নির্দিষ্ট সংখ্যক চেষ্টা করার পর পুনরায় চেষ্টা বন্ধ করা।

Exponential Backoff Example:

import { throwError } from 'rxjs';
import { retryWhen, delay, take, mergeMap } from 'rxjs/operators';

function makeApiCall() {
  return Math.random() > 0.5 ? of('Success') : throwError(new Error('API Call Failed'));
}

const observable = makeApiCall().pipe(
  retryWhen(errors => 
    errors.pipe(
      mergeMap((error, index) => {
        if (index < 5) {
          const delayTime = Math.pow(2, index) * 1000; // Exponential backoff (2^index)
          console.log(`Attempt ${index + 1}: Retrying after ${delayTime / 1000} seconds`);
          return of(error).pipe(delay(delayTime));
        }
        return throwError(error); // ৫ বার চেষ্টা করার পরও ইরর হলে ত্রুটি ছুড়ে দিবে
      })
    )
  )
);

observable.subscribe({
  next: result => console.log(result),
  error: err => console.log('Final Error:', err)
});

এখানে, delayTime প্রত্যেক ব্যর্থতার পরে দ্বিগুণ বাড়ানো হয়, অর্থাৎ প্রথম চেষ্টা ১ সেকেন্ড, দ্বিতীয় চেষ্টা ২ সেকেন্ড, তৃতীয় চেষ্টা ৪ সেকেন্ড ইত্যাদি।


সারাংশ

retryWhen() RxJS এর একটি শক্তিশালী অপারেটর, যা কাস্টম retry লজিক তৈরি করতে ব্যবহৃত হয়। এটি ত্রুটি (error) হলে পুনরায় চেষ্টা করার জন্য কাস্টম স্ট্র্যাটেজি গ্রহণ করতে সাহায্য করে। আপনি mergeMap এবং delay সহ অন্যান্য অপারেটর ব্যবহার করে পুনরায় চেষ্টা করার সময় নির্ধারণ এবং retry কৌশল তৈরি করতে পারেন, যেমন fixed interval, exponential backoff, বা max retry attempts। এই কাস্টম retry লজিক আপনার অ্যাপ্লিকেশনে উন্নত ত্রুটি পরিচালনা এবং পুনরুদ্ধারের জন্য কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...