DeferredResult এবং CompletableFuture এর মাধ্যমে Asynchronous Processing

Spring Web Services এবং Asynchronous Communication - স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services) - Java Technologies

258

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

বৈশিষ্ট্য:

  1. Async প্রসেস চলাকালীন মূল থ্রেড মুক্ত থাকে।
  2. সময়মতো সাড়া না দিলে ডিফল্ট মেসেজ পাঠানো যায়।

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");
            }
        });
    }
}

বৈশিষ্ট্য:

  1. সহজ Async প্রসেসিং।
  2. চেইনিং এবং একাধিক টাস্ক একত্রে পরিচালনা করার জন্য আদর্শ।

DeferredResult এবং CompletableFuture-এর তুলনা

বৈশিষ্ট্যDeferredResultCompletableFuture
Spring IntegrationSpring 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)
        );
    }
}

ব্যবহারের ক্ষেত্রে

  1. লং-রানিং টাস্ক: যেমন ডেটা প্রক্রিয়াজাতকরণ বা এক্সটার্নাল API কল।
  2. রিসোর্স অপ্টিমাইজেশন: মূল থ্রেডকে ব্লক না করে অন্য কাজ করতে দেওয়া।
  3. রিয়েল-টাইম সিস্টেম: যেখানে তাত্ক্ষণিক প্রতিক্রিয়া প্রয়োজন।

মূল সুবিধা

  • উচ্চ পারফরম্যান্স।
  • টাইমআউট বা ফল্ট হ্যান্ডলিং সহজতর।
  • Scalability বৃদ্ধির জন্য কার্যকর।
Content added By
Promotion

Are you sure to start over?

Loading...