Spring Web Services-এ DeferredResult এবং CompletableFuture ব্যবহার করে Asynchronous Processing প্রয়োগ করা হয়, যা ক্লায়েন্টের অনুরোধ এবং সার্ভারের প্রতিক্রিয়া পরিচালনা করার সময় অ্যাপ্লিকেশনটিকে ব্লক না করে উচ্চ পারফরম্যান্স প্রদান করে।
Asynchronous Processing: DeferredResult এবং CompletableFuture
DeferredResult:
DeferredResult হল Spring MVC-তে একটি Async প্রসেসিং টুল, যা মূল থ্রেডকে ব্লক না করে একটি দীর্ঘমেয়াদি অনুরোধের প্রতিক্রিয়া পাঠাতে দেয়।
উদাহরণ:
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
import java.util.concurrent.ForkJoinPool;
@RestController
@RequestMapping("/async")
public class AsyncController {
@GetMapping("/deferred")
public DeferredResult<String> handleAsyncRequest() {
// DeferredResult তৈরি করুন
DeferredResult<String> deferredResult = new DeferredResult<>(5000L, "Timeout");
// Async প্রসেস শুরু করুন
ForkJoinPool.commonPool().submit(() -> {
try {
Thread.sleep(3000); // Mock delay
deferredResult.setResult("DeferredResult Response");
} catch (InterruptedException e) {
deferredResult.setErrorResult("Error occurred");
}
});
return deferredResult;
}
}
বৈশিষ্ট্য:
- Async প্রসেস চলাকালীন মূল থ্রেড মুক্ত থাকে।
- সময়মতো সাড়া না দিলে ডিফল্ট মেসেজ পাঠানো যায়।
CompletableFuture:
CompletableFuture হল Java 8-এ আসা একটি ক্লাস, যা অ্যাসিঙ্ক্রোনাস কম্পিউটেশন পরিচালনা করতে ব্যবহৃত হয়।
উদাহরণ:
import org.springframework.web.bind.annotation.*;
import java.util.concurrent.CompletableFuture;
@RestController
@RequestMapping("/async")
public class AsyncController {
@GetMapping("/future")
public CompletableFuture<String> handleFutureRequest() {
// CompletableFuture তৈরি করুন
return CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000); // Mock delay
return "CompletableFuture Response";
} catch (InterruptedException e) {
throw new RuntimeException("Error occurred");
}
});
}
}
বৈশিষ্ট্য:
- সহজ Async প্রসেসিং।
- চেইনিং এবং একাধিক টাস্ক একত্রে পরিচালনা করার জন্য আদর্শ।
DeferredResult এবং CompletableFuture-এর তুলনা
| বৈশিষ্ট্য | DeferredResult | CompletableFuture |
|---|---|---|
| Spring Integration | Spring MVC-এর জন্য নেটিভ সাপোর্ট | Java Standard API |
| Callback Handling | সরাসরি কাস্টম থ্রেডে প্রসেস করা যায় | চেইনিং এবং ফিউচার ম্যানিপুলেশন সহজ |
| Timeout Support | ডিফল্ট টাইমআউট এবং প্রতিক্রিয়া সেট করা যায় | টাইমআউট পরিচালনার জন্য কাস্টম লজিক প্রয়োজন |
Server Side Configuration:
Spring-এ Async প্রসেসিং সাপোর্ট সক্রিয় করতে @EnableAsync এবং AsyncConfigurer ব্যবহার করুন।
উদাহরণ:
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
@EnableAsync
public class AsyncConfig {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
executor.setThreadNamePrefix("AsyncExecutor-");
executor.initialize();
return executor;
}
}
ক্লায়েন্টের উদাহরণ (RestTemplate):
import org.springframework.web.client.RestTemplate;
import java.util.concurrent.CompletableFuture;
public class AsyncClient {
private RestTemplate restTemplate = new RestTemplate();
public CompletableFuture<String> callAsyncEndpoint() {
return CompletableFuture.supplyAsync(() ->
restTemplate.getForObject("http://localhost:8080/async/future", String.class)
);
}
}
ব্যবহারের ক্ষেত্রে
- লং-রানিং টাস্ক: যেমন ডেটা প্রক্রিয়াজাতকরণ বা এক্সটার্নাল API কল।
- রিসোর্স অপ্টিমাইজেশন: মূল থ্রেডকে ব্লক না করে অন্য কাজ করতে দেওয়া।
- রিয়েল-টাইম সিস্টেম: যেখানে তাত্ক্ষণিক প্রতিক্রিয়া প্রয়োজন।
মূল সুবিধা
- উচ্চ পারফরম্যান্স।
- টাইমআউট বা ফল্ট হ্যান্ডলিং সহজতর।
- Scalability বৃদ্ধির জন্য কার্যকর।
Content added By
Read more