Asynchronous Request Handling এর ধারণা

Spring MVC এর মধ্যে Asynchronous Request Handling - স্প্রিং এমভিসি (Spring MVC) - Java Technologies

312

Asynchronous Request Handling Spring MVC তে একটি প্রক্রিয়া যা রিকোয়েস্ট প্রক্রিয়া এবং রেসপন্স তৈরির সময় ব্লক না হয়ে প্রসেসিং করা হয়। সাধারণ HTTP রিকোয়েস্টে, সার্ভার ক্লায়েন্টের রিকোয়েস্ট সম্পূর্ণভাবে প্রক্রিয়া না করা পর্যন্ত অপেক্ষা করে থাকে, কিন্তু Asynchronous রিকোয়েস্ট হ্যান্ডলিং-এর মাধ্যমে, সার্ভার রিকোয়েস্ট প্রক্রিয়া করার সময় অন্যান্য রিকোয়েস্ট গ্রহণ করতে পারে এবং দীর্ঘ চলমান কাজের জন্য অপেক্ষা না করে কেবল ফলাফল প্রদান করতে পারে।

এটি সাধারণত ওয়েব অ্যাপ্লিকেশনে বড় পরিমাণের ডেটা বা সময়সাপেক্ষ কাজ প্রক্রিয়া করার সময় ব্যবহৃত হয়, যেখানে সার্ভারকে দীর্ঘ সময় অপেক্ষা করতে হবে এবং এভাবে রিকোয়েস্ট প্রক্রিয়াকরণের দক্ষতা বৃদ্ধি পায়।


Asynchronous Request Handling কেন গুরুত্বপূর্ণ?

  1. Non-blocking Execution: ক্লায়েন্ট এবং সার্ভার একে অপরকে ব্লক না করে আলাদা আলাদা কাজ করতে পারে। এটি সার্ভারের জন্য আরও কার্যকর এবং স্কেলেবেল।
  2. Improved Performance: বড় পরিমাণে দীর্ঘ কার্যকরী কাজ (যেমন ডেটাবেস কুয়েরি, ফাইল আপলোড বা ডাউনলোড) প্রক্রিয়া করার সময় ব্যবহারকারী ইন্টারফেসটি প্রতিক্রিয়া দেয় এবং সার্ভার অন্যান্য রিকোয়েস্ট হ্যান্ডল করতে পারে।
  3. Scalability: অ্যাপ্লিকেশনটি আরও রিসোর্স-অভিযোজিত হতে পারে, কারণ একই সময়ে একাধিক কাজ সম্পাদন করা সম্ভব হয়।
  4. Resource Management: সার্ভার রিসোর্স ব্যবহার উন্নত হয় এবং একই সময়ে অনেকগুলি রিকোয়েস্ট সম্পন্ন করা যেতে পারে।

Spring MVC তে Asynchronous Request Handling কনফিগারেশন

Spring MVC তে Asynchronous Request Handling সক্ষম করতে, @Async অ্যানোটেশন এবং DeferredResult ব্যবহার করা হয়। Spring MVC 3.2 এর পর থেকে, Spring ফ্রেমওয়ার্কে এই ফিচারটি ইনক্লুড করা হয়েছে।

Step 1: Asynchronous Method with @Async

@Async অ্যানোটেশন ব্যবহার করে, আপনি একটি মেথডকে অ্যাসিঙ্ক্রোনাস কার্যকলাপ হিসেবে চিহ্নিত করতে পারেন। Spring অ্যাসিঙ্ক্রোনাস কাজটি আলাদা থ্রেডে প্রক্রিয়া করবে, যাতে মূল থ্রেডটি ব্লক না হয়।

HomeController.java (Asynchronous Method উদাহরণ):

import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @GetMapping("/longProcess")
    public String longProcess() {
        longRunningTask();
        return "Request is being processed asynchronously!";
    }

    @Async
    public void longRunningTask() {
        try {
            // এখানে দীর্ঘ সময় নেয় এমন কাজ যেমন ডেটাবেস কুয়েরি বা ফাইল আপলোড/ডাউনলোড করা যেতে পারে।
            Thread.sleep(5000);  // 5 সেকেন্ডের জন্য থ্রেড স্লিপ
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Long running task finished!");
    }
}
ব্যাখ্যা:
  • @Async: এই অ্যানোটেশনটি যেকোনো মেথডে ব্যবহৃত হলে, সেটি অ্যাসিঙ্ক্রোনাস ভাবে রান হবে, অর্থাৎ কাজটি অন্য থ্রেডে রান হবে এবং মূল থ্রেড ব্লক হবে না।
  • longRunningTask(): এটি একটি দীর্ঘ-running টাস্ক যা ৫ সেকেন্ড সময় নেবে, কিন্তু সার্ভার অন্যান্য রিকোয়েস্ট হ্যান্ডল করতে সক্ষম থাকবে।

Step 2: Enable Async Support in Spring Configuration

Spring MVC তে অ্যাসিঙ্ক্রোনাস কার্যকলাপ ব্যবহারের জন্য @EnableAsync অ্যানোটেশনটি ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রসেসিং সক্ষম করতে হবে।

AppConfig.java (Configuration):

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync  // @Async অ্যানোটেশন সক্রিয় করতে
public class AppConfig {
}
ব্যাখ্যা:
  • @EnableAsync: এটি Spring অ্যাপ্লিকেশন কনটেক্সটে অ্যাসিঙ্ক্রোনাস প্রসেসিং সক্রিয় করে। এটি Spring Context-এ কাস্টম থ্রেডে কাজ করার জন্য ইন্টার্নাল রিসোর্সগুলি কনফিগার করে।

Step 3: Use DeferredResult for Asynchronous Handling

Spring MVC তে DeferredResult ব্যবহার করলে, আপনি ওয়েব রিকোয়েস্টকে অ্যাসিঙ্ক্রোনাসভাবে হ্যান্ডল করতে পারেন এবং HTTP রেসপন্সটি যখন প্রক্রিয়া সম্পন্ন হবে, তখন রিটার্ন করা হবে।

DeferredResultController.java:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;

@RestController
public class DeferredResultController {

    @GetMapping("/asyncRequest")
    public DeferredResult<String> handleAsyncRequest() {
        DeferredResult<String> deferredResult = new DeferredResult<>();

        // এখানে একটি দীর্ঘ-running কাজ সিমুলেট করা হচ্ছে
        new Thread(() -> {
            try {
                Thread.sleep(5000); // 5 সেকেন্ডের জন্য থ্রেড স্লিপ
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            deferredResult.setResult("Async task completed!");
        }).start();

        return deferredResult;
    }
}
ব্যাখ্যা:
  • DeferredResult<String>: এটি Spring MVC তে অ্যাসিঙ্ক্রোনাস রেসপন্সের জন্য ব্যবহৃত হয়। এই ক্লাসটি HTTP রেসপন্সটি পরবর্তী সময়ে অ্যাসিঙ্ক্রোনাসভাবে সেট করে দেয়।
  • deferredResult.setResult(): এটি অ্যাসিঙ্ক্রোনাস কাজ সম্পন্ন হওয়ার পর HTTP রেসপন্স পাঠানোর জন্য ব্যবহৃত হয়।

Step 4: Enable Async Support in Spring Configuration

@EnableAsync অ্যানোটেশনটি আগে কনফিগার করা হয়েছে, তাই কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন নেই যদি আপনি DeferredResult ব্যবহার করেন।


Spring MVC তে Asynchronous Request Handling এর সুবিধা:

  1. Non-blocking: অ্যাসিঙ্ক্রোনাস প্রসেসিং সার্ভারের থ্রেডগুলোকে ব্লক না করে, একাধিক রিকোয়েস্ট হ্যান্ডল করার সুযোগ প্রদান করে।
  2. Performance Improvement: বড় আকারের ডেটা প্রসেসিং, যেমন ইমেজ প্রক্রিয়াকরণ, ডেটাবেস কুয়েরি বা ফাইল আপলোড/ডাউনলোড ইত্যাদি করার সময় সার্ভার অন্যান্য রিকোয়েস্ট হ্যান্ডল করতে পারে।
  3. Scalability: একাধিক অ্যাসিঙ্ক্রোনাস কাজ একসাথে প্রক্রিয়া করা সম্ভব, যার ফলে অ্যাপ্লিকেশনটি আরও স্কেলেবল এবং আরও ইউজার এক্সপিরিয়েন্স প্রদান করতে সক্ষম হয়।
  4. Optimized Resource Usage: যেহেতু থ্রেডগুলি একে অপরকে ব্লক না করে, সার্ভারের রিসোর্স ব্যবহারের ক্ষমতা বৃদ্ধি পায়।

উপসংহার:

Spring MVC তে Asynchronous Request Handling ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনে অ্যাসিঙ্ক্রোনাস কার্যকলাপ পরিচালনা করতে পারেন, যা সার্ভারের কর্মক্ষমতা এবং স্কেলেবিলিটি বৃদ্ধি করতে সাহায্য করে। @Async এবং DeferredResult ব্যবহারের মাধ্যমে আপনি সহজেই অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট হ্যান্ডলিং প্রক্রিয়া করতে পারেন। এতে ব্যবহারকারীরা অপেক্ষা না করে দ্রুত প্রতিক্রিয়া পেতে পারেন এবং সার্ভারও একাধিক রিকোয়েস্ট হ্যান্ডল করতে সক্ষম হয়।

Content added By
Promotion

Are you sure to start over?

Loading...