Resilience4j লাইব্রেরি ব্যবহার করে এই ফিচারগুলো কনফিগার করা যায়।
Resilience4j হলো একটি হালকা ওজনের ফ্রেমওয়ার্ক যা মাইক্রোসার্ভিসের মধ্যে রেসিলিয়েন্স প্যাটার্ন (যেমন: Circuit Breaker, Retry, Bulkhead, এবং TimeLimiter) সহজে প্রয়োগ করতে সাহায্য করে।
১. Maven ডিপেন্ডেন্সি যোগ করা
আপনার pom.xml ফাইলে নিচের ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.1</version> <!-- আপনার প্রয়োজন অনুযায়ী ভার্সন ব্যবহার করুন -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
২. application.yml কনফিগারেশন
Resilience4j এর জন্য প্রয়োজনীয় কনফিগারেশন application.yml ফাইলে যুক্ত করুন:
resilience4j:
circuitbreaker:
configs:
default:
slidingWindowSize: 10
failureRateThreshold: 50
waitDurationInOpenState: 10s
permittedNumberOfCallsInHalfOpenState: 3
minimumNumberOfCalls: 5
instances:
myService:
baseConfig: default
slidingWindowSize: 20
failureRateThreshold: 30
retry:
configs:
default:
maxAttempts: 3
waitDuration: 2s
instances:
myService:
maxAttempts: 5
waitDuration: 1s
bulkhead:
configs:
default:
maxConcurrentCalls: 10
maxWaitDuration: 0
instances:
myService:
maxConcurrentCalls: 5
timelimiter:
configs:
default:
timeoutDuration: 2s
instances:
myService:
timeoutDuration: 3s
৩. সার্ভিস ক্লাসে Circuit Breaker এবং Retry ইমপ্লিমেন্টেশন
Circuit Breaker যুক্ত করা
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class MyService {
private final RestTemplate restTemplate;
public MyService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackMethod")
public String callExternalService() {
return restTemplate.getForObject("http://example.com/api", String.class);
}
public String fallbackMethod(Throwable throwable) {
return "Fallback response: Service is unavailable";
}
}
Retry যুক্ত করা
import io.github.resilience4j.retry.annotation.Retry;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Retry(name = "myService", fallbackMethod = "fallbackMethod")
public String callExternalService() {
// API call logic
throw new RuntimeException("Simulated exception");
}
public String fallbackMethod(Throwable throwable) {
return "Fallback response: Retry failed";
}
}
৪. Bulkhead ইমপ্লিমেন্টেশন
Bulkhead প্যাটার্ন ব্যবহার করে নির্দিষ্ট সংখ্যক কনকারেন্ট কল নিয়ন্ত্রণ করা যায়।
import io.github.resilience4j.bulkhead.annotation.Bulkhead;
import org.springframework.stereotype.Service;
@Service
public class MyService {
@Bulkhead(name = "myService", fallbackMethod = "fallbackMethod")
public String callExternalService() {
// API call logic
return "External service response";
}
public String fallbackMethod(Throwable throwable) {
return "Fallback response: Too many concurrent requests";
}
}
৫. TimeLimiter ইমপ্লিমেন্টেশন
TimeLimiter ব্যবহার করে কোনো সার্ভিসের জন্য নির্দিষ্ট সময়সীমা নির্ধারণ করা যায়।
import io.github.resilience4j.timelimiter.annotation.TimeLimiter;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
@Service
public class MyService {
@TimeLimiter(name = "myService")
public CompletableFuture<String> callExternalService() {
return CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000); // Simulate delay
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "External service response";
});
}
}
৬. লগিং এবং মনিটরিং যুক্ত করা
Resilience4j এর মেট্রিক্সগুলো মনিটর করার জন্য Actuator ব্যবহার করুন।
Maven ডিপেন্ডেন্সি:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yml:
management:
endpoints:
web:
exposure:
include: resilience4j*
উদাহরণ:
http://localhost:8080/actuator/resilience4j এ মেট্রিক্স দেখতে পারবেন।
৭. টিপস:
- Fallback Method: প্রতিটি Circuit Breaker, Retry, Bulkhead, এবং TimeLimiter এর জন্য একটি ফallback মেথড ব্যবহার করুন।
- Timeout Management: সার্ভিস টাইমআউট সঠিকভাবে সেট করুন।
- Custom Configuration: প্রয়োজন অনুযায়ী কনফিগারেশন অ্যাডজাস্ট করুন।
- Logging: লগিং ব্যবহার করে প্রতিটি রিকোয়েস্ট এবং এর ফলাফল মনিটর করুন।
- Actuator Integration: সিস্টেমের স্বাস্থ্য এবং রিসোর্স ব্যবহারের রিপোর্ট পেতে Actuator ব্যবহার করুন।
উপসংহার
Circuit Breaker, Retry, Bulkhead, এবং TimeLimiter এর সাহায্যে মাইক্রোসার্ভিস অ্যাপ্লিকেশন আরও নির্ভরযোগ্য এবং স্কেলেবল হয়। Resilience4j ফ্রেমওয়ার্ক ব্যবহার করে স্প্রিং বুট অ্যাপ্লিকেশন সহজেই এই রেসিলিয়েন্স প্যাটার্নগুলো ইমপ্লিমেন্ট করতে পারে।
Read more