Message Selectors এবং Filters

Java Technologies - অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ)
204
204

অ্যাপাচি অ্যাকটিভএমকিউ মেসেজ নির্বাচনের (Message Selection) জন্য একটি শক্তিশালী ব্যবস্থা প্রদান করে, যা Message Selectors এবং Filters এর মাধ্যমে মেসেজগুলিকে নির্দিষ্ট শর্ত অনুযায়ী নির্বাচন করতে সহায়ক। এই ব্যবস্থা মেসেজ কনসিউমারের জন্য নির্দিষ্ট মেসেজগুলো গ্রহণ করার প্রক্রিয়াকে সহজ করে, যাতে তারা শুধু প্রয়োজনীয় মেসেজগুলোই প্রক্রিয়া করতে পারে। এটি সিস্টেমের পারফরম্যান্স এবং দক্ষতা বৃদ্ধি করে।


Message Selectors (মেসেজ সিলেক্টর)

Message Selectors হল একটি বৈশিষ্ট্য যা মেসেজ কনসিউমারকে মেসেজের নির্দিষ্ট সেট নির্বাচন করতে সাহায্য করে, যেখানে কনসিউমার শুধুমাত্র সেই মেসেজগুলো গ্রহণ করবে যেগুলির মধ্যে নির্দিষ্ট শর্ত মেলে। এটি Java Message Service (JMS) API এর অংশ, এবং এটি SQL-এর মতো সিলেকশন স্টেটমেন্ট ব্যবহার করে মেসেজগুলো ফিল্টার করার জন্য ব্যবহৃত হয়।

১. Message Selector কিভাবে কাজ করে?

মেসেজ সিলেক্টরটি একটি JMSSelector স্ট্রিং, যা SQL92-like syntax ব্যবহার করে তৈরি হয়। এটি প্রযোজ্য হয়ে থাকে মেসেজের প্রপার্টি, প্রপার্টি ভ্যালু এবং অন্যান্য মেসেজ বৈশিষ্ট্যের ওপর।

উদাহরণস্বরূপ:

  • Message Selector Syntax: "JMSCorrelationID = '12345'"
    এখানে, JMSCorrelationID মেসেজের একটি প্রপার্টি এবং এটি 12345 এর সমান হতে হবে যাতে মেসেজটি নির্বাচিত হয়।

২. Message Selector ব্যবহার

এখানে একটি উদাহরণ দেওয়া হল, যেখানে একটি মেসেজ সিলেক্টর কিউ থেকে শুধুমাত্র নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজ গ্রহণ করতে ব্যবহৃত হয়:

// Create a connection factory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

// Create a connection
Connection connection = connectionFactory.createConnection();
connection.start();

// Create a session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// Create destination (queue or topic)
Destination destination = session.createQueue("TEST.QUEUE");

// Create a message selector (filter messages based on JMSCorrelationID)
String selector = "JMSCorrelationID = '12345'";

// Create consumer with the selector
MessageConsumer consumer = session.createConsumer(destination, selector);

// Receive messages
Message message = consumer.receive();

// Process the message
if (message != null) {
    // Handle the message
    System.out.println("Received Message: " + ((TextMessage) message).getText());
}

এখানে, JMSCorrelationID = '12345' মেসেজ সিলেক্টর হিসাবে ব্যবহৃত হয়েছে, যা কিউ থেকে শুধু সেই মেসেজগুলোকে গ্রহণ করবে যেগুলোর JMSCorrelationID প্রপার্টি '12345'

৩. Message Selector Examples

  • priority > 5: priority প্রপার্টি ৫ এর বেশি হলে মেসেজ নির্বাচন করা হবে।
  • type = 'urgent': মেসেজটির type প্রপার্টি 'urgent' হলে মেসেজটি নির্বাচিত হবে।
  • timestamp >= '2024-01-01': মেসেজের টাইমস্ট্যাম্প যদি ২০২৪ সালের জানুয়ারি ১ তারিখের সমান বা তার পরে থাকে, তবে মেসেজটি নির্বাচিত হবে।

Filters (ফিল্টার)

ফিল্টারিং হল মেসেজের নির্দিষ্ট সেট নির্বাচন করার প্রক্রিয়া, যা মেসেজ কনসিউমারদের উদ্দেশ্য অনুযায়ী উপকারী হতে পারে। Filters মেসেজ সিলেক্টরের মতো হলেও এগুলো সাধারণত বেশি জটিল শর্ত বা কন্ডিশনের জন্য ব্যবহৃত হয়।

১. Message Filters

ফিল্টারগুলো সাধারণত MessageListener ইন্টারফেস বা কাস্টম ফিল্টারিং সিস্টেম ব্যবহার করে কিউ বা টপিক থেকে মেসেজ নির্বাচন করতে পারে। এটি মেসেজের প্রপার্টি এবং কনটেন্টের ওপর নির্ভর করে কাজ করে।

২. Filters এর উদাহরণ

যদি আপনি শুধুমাত্র সেই মেসেজগুলো দেখতে চান যা একটি নির্দিষ্ট টাইপের হয়, তবে আপনি একটি কাস্টম ফিল্টার সেট করতে পারেন, যেমন:

public class MyMessageListener implements MessageListener {
    public void onMessage(Message message) {
        try {
            // Extract properties or content from message
            String messageType = message.getStringProperty("type");
            if ("urgent".equals(messageType)) {
                // Process the urgent message
                System.out.println("Received urgent message: " + ((TextMessage) message).getText());
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

এখানে, শুধুমাত্র সেই মেসেজগুলো গ্রহণ করা হচ্ছে যেগুলোর type প্রপার্টি 'urgent'

৩. Custom Filters and Criteria

অ্যাপাচি অ্যাকটিভএমকিউ কাস্টম ফিল্টারগুলি খুবই ফ্লেক্সিবল এবং আপনার প্রয়োজন অনুসারে কাস্টম কন্ডিশন বা ফিল্টার ক্রাইটেরিয়া সেট করা যেতে পারে। এটি ব্যবহারকারীর প্রয়োজন অনুযায়ী উন্নত ফিল্টারিং সক্ষম করে।


সারাংশ

Message Selectors এবং Filters হল দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা অ্যাপাচি অ্যাকটিভএমকিউ তে মেসেজ প্রক্রিয়াকরণের কার্যকারিতা এবং দক্ষতা বাড়াতে সহায়ক। মেসেজ সিলেক্টর ব্যবহার করে আপনি কিউ থেকে শুধুমাত্র নির্দিষ্ট শর্তের ভিত্তিতে মেসেজ গ্রহণ করতে পারবেন, যা মেসেজ সিস্টেমের অপারেশনাল পারফরম্যান্স উন্নত করতে সহায়ক। Filters এর মাধ্যমে আরও জটিল শর্তাবলীর ভিত্তিতে মেসেজ নির্বাচন করা সম্ভব, যা ডিস্ট্রিবিউটেড সিস্টেমে মেসেজ ম্যানিপুলেশনকে আরও কাস্টমাইজ করতে সাহায্য করে।

common.content_added_by

Message Selector এর ভূমিকা

136
136

Message Selector অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) এর একটি শক্তিশালী বৈশিষ্ট্য, যা মেসেজ কনজিউমারদের মেসেজ ফিল্টার করার সক্ষমতা প্রদান করে। এটি একটি SQL-like query ব্যবহার করে কনজিউমারকে নির্দিষ্ট ধরনের মেসেজ গ্রহণ করতে অনুমতি দেয়। মেসেজ সিলেক্টর ব্যবহার করার মাধ্যমে, আপনি নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজগুলো নির্বাচন করতে পারেন, যাতে শুধুমাত্র প্রয়োজনীয় মেসেজগুলোই কনজিউমার গ্রহণ করে এবং অন্য মেসেজগুলো ফিল্টার হয়ে যায়।

Message Selector এর মূল ধারণা

Message Selector হল একটি কনফিগারেবল ফিল্টার যা JMS (Java Message Service) স্পেসিফিকেশনের মধ্যে অন্তর্ভুক্ত। এটি একটি boolean expression বা filter এর মতো কাজ করে, যা মেসেজ প্রপার্টির উপর ভিত্তি করে মেসেজকে নির্বাচন বা অস্বীকার করে।

Message Selector এর কাজের পদ্ধতি

যখন একটি কনজিউমার একটি কিউ বা টপিক থেকে মেসেজ গ্রহণ করতে চায়, সে একটি সিলেক্টর প্যারামিটার যোগ করতে পারে। এটি কনজিউমারকে কেবল সেই মেসেজগুলো গ্রহণ করতে দেয় যেগুলোর প্রপার্টি তার নির্ধারিত শর্তের সঙ্গে মিলে।

উদাহরণ:

যদি একটি order কিউ থাকে, যেখানে বিভিন্ন প্রকারের অর্ডার মেসেজ জমা হয় (যেমন, পেমেন্ট অর্ডার, প্রোডাক্ট অর্ডার ইত্যাদি), তাহলে কনজিউমার এমন সিলেক্টর ব্যবহার করতে পারে যাতে শুধুমাত্র প্রোডাক্ট অর্ডারগুলোই গ্রহণ করা হয়।


Message Selector এর Syntax

Message Selector হল একটি SQL-like স্ট্রিং এক্সপ্রেশন, যা WHERE ক্লজের মতো কাজ করে। উদাহরণস্বরূপ, আপনি মেসেজের property এর মান অনুসারে একটি মেসেজ নির্বাচন করতে পারেন।

উদাহরণ:

  • property_name = 'value': এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name এর মান 'value'
  • property_name > value: এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name এর মান value এর চেয়ে বড়।
  • property_name IN (value1, value2): এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টি property_name এর মান value1 বা value2 এর মধ্যে রয়েছে।

Message Selector এর ব্যবহার

ধরা যাক, একটি টপিক বা কিউতে অর্ডার সংক্রান্ত মেসেজ আসছে, এবং আপনি শুধুমাত্র priority প্রপার্টি ৫ বা তার বেশি এমন মেসেজ নিতে চান। এর জন্য আপনি একটি সিলেক্টর ব্যবহার করতে পারেন।

Example: Message Selector in Java

import javax.jms.*;

public class MessageSelectorExample {
    public static void main(String[] args) throws JMSException {
        // ActiveMQ কনফিগারেশন
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        // সেশন তৈরি করা
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        // ডেস্টিনেশন তৈরি করা (Queue or Topic)
        Destination destination = session.createQueue("OrdersQueue");

        // মেসেজ কনজিউমার তৈরি, যেখানে সিলেক্টর যুক্ত করা হয়েছে
        String messageSelector = "priority > 5";  // মেসেজ সিলেক্টর
        MessageConsumer consumer = session.createConsumer(destination, messageSelector);

        // মেসেজ গ্রহণ করা
        Message message = consumer.receive();
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received Message: " + textMessage.getText());
        }

        // সংযোগ বন্ধ করা
        consumer.close();
        session.close();
        connection.close();
    }
}

এখানে:

  • String messageSelector = "priority > 5";: এটি একটি সিলেক্টর শর্ত, যা কেবলমাত্র সেই মেসেজ গ্রহণ করবে যেগুলোর priority প্রপার্টির মান ৫ এর বেশি।
  • createConsumer(destination, messageSelector): এটি কনজিউমার তৈরি করবে এবং শুধুমাত্র সেই মেসেজগুলো গ্রহণ করবে যেগুলি সিলেক্টরের শর্ত পূর্ণ করবে।

Message Selector এর সুবিধা

  1. ফিল্টারিং:
    • মেসেজ সিলেক্টর ব্যবহার করে, কনজিউমারদের নির্দিষ্ট প্রপার্টি অনুযায়ী মেসেজ ফিল্টার করতে দেওয়া হয়, যা অপ্রয়োজনীয় মেসেজ গ্রহণ এড়াতে সাহায্য করে।
  2. প্রপার্টি ভিত্তিক সিলেকশন:
    • এটি মেসেজের প্রপার্টি (যেমন priority, status, order_type) এর ভিত্তিতে মেসেজ নির্বাচন করতে সহায়ক।
  3. স্কেলেবিলিটি:
    • যখন একাধিক সাবস্ক্রাইবার থাকে, তখন মেসেজ সিলেক্টর ব্যবহারে একটি মেসেজ একাধিক সাবস্ক্রাইবারের কাছে পাঠানো হতে পারে, কিন্তু কেবলমাত্র নির্দিষ্ট শর্ত পূর্ণ করার মাধ্যমে কনজিউমার মেসেজটি গ্রহণ করবে।
  4. পারফরম্যান্স বৃদ্ধি:
    • সঠিকভাবে সিলেক্টরের মাধ্যমে, কনজিউমার শুধুমাত্র প্রয়োজনীয় মেসেজই গ্রহণ করে, যার ফলে সিস্টেমের পারফরম্যান্স বৃদ্ধি পায়।

কিছু সাধারণ ব্যবহার ক্ষেত্র

  1. অর্ডার সিস্টেম:
    • শুধুমাত্র priority > 5 এমন অর্ডার মেসেজ গ্রহণ করা।
    • status = 'pending' মেসেজ গ্রহণ করে কেবল পেনডিং অর্ডার প্রক্রিয়া করা।
  2. ইভেন্ট প্রসেসিং:
    • eventType = 'payment' সিলেক্টর ব্যবহার করে কেবল পেমেন্ট সম্পর্কিত ইভেন্ট মেসেজ গ্রহণ করা।
  3. সেন্সর ডাটা:
    • temperature > 100 এর মাধ্যমে কেবলমাত্র উচ্চ তাপমাত্রার সেন্সর ডাটা গ্রহণ করা।

সারাংশ

Message Selector অ্যাপাচি অ্যাকটিভএমকিউ-তে একটি অত্যন্ত শক্তিশালী ফিচার, যা কনজিউমারদের মেসেজ নির্বাচন করার জন্য SQL-like কুয়েরি ব্যবহার করতে সাহায্য করে। এর মাধ্যমে কনজিউমাররা নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজ ফিল্টার করতে পারে, যেমন priority, status, বা অন্যান্য কাস্টম প্রপার্টি। এটি পারফরম্যান্স উন্নত করতে এবং সিস্টেমে নির্দিষ্ট মেসেজ ডেলিভারি নিশ্চিত করতে সাহায্য করে।

common.content_added_by

Complex Filtering ব্যবহার করে Message Routing

134
134

অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি শক্তিশালী মেসেজ ব্রোকার যা বিভিন্ন ধরনের মেসেজ রাউটিং এবং ফিল্টারিং সমর্থন করে। Message Routing বা মেসেজ রাউটিং হল প্রক্রিয়া যার মাধ্যমে মেসেজগুলো সঠিক ভোক্তা (consumer) বা গন্তব্য (destination) তে পৌঁছানো হয়। কখনও কখনও, মেসেজ রাউটিং করার জন্য Complex Filtering (যেমন, বিভিন্ন শর্ত বা কন্ডিশনের মাধ্যমে মেসেজ বাছাই করা) ব্যবহার করা হয়, যাতে একটি ব্রোকার থেকে অনেকগুলো মেসেজে থেকে সঠিক মেসেজটি চয়ন করা যায়।

Complex Filtering Overview

অ্যাকটিভএমকিউ-এর complex filtering ব্যবহারের মাধ্যমে আপনি সহজে মেসেজগুলোকে বিভিন্ন কন্ডিশনের ভিত্তিতে ফিল্টার করতে পারেন। এটি বিশেষভাবে তখন প্রয়োজনীয়, যখন বিভিন্ন ভোক্তা একই কিউ বা টপিক থেকে মেসেজ গ্রহণ করছেন, এবং কিছু ভোক্তার জন্য কিছু নির্দিষ্ট মেসেজ পাঠানো প্রয়োজন।

অ্যাকটিভএমকিউ JMS selectors এবং Message Properties ব্যবহার করে মেসেজ ফিল্টারিং এবং রাউটিং পরিচালনা করতে পারে। JMS selectors একটি SQL-like syntax ব্যবহার করে মেসেজের কিছু প্রপার্টির উপর ভিত্তি করে মেসেজ ফিল্টার করার সুযোগ দেয়।

Complex Filtering-এর জন্য উপাদান

  1. JMS Message Selectors:
    • এটি মেসেজের বিভিন্ন প্রপার্টি যেমন JMSMessageID, JMSCorrelationID, JMSPriority, এবং কাস্টম প্রপার্টি ব্যবহার করে মেসেজ ফিল্টার করতে সাহায্য করে।
  2. Message Properties:
    • মেসেজে কাস্টম প্রপার্টি যোগ করা হয় যেগুলি মেসেজ ফিল্টারিং বা রাউটিং করার সময় কাজে লাগে। এই প্রপার্টি গুলি সাধারণত প্রোডিউসার দ্বারা মেসেজ পাঠানোর সময় নির্ধারিত হয়।
  3. SQL-like Filtering:
    • অ্যাকটিভএমকিউ SQL-এর মতো ভাষা ব্যবহার করে মেসেজের প্রপার্টি অনুযায়ী মেসেজ ফিল্টারিং করে। উদাহরণস্বরূপ, আপনি age > 30 বা color = 'red' এর মতো শর্তে মেসেজ ফিল্টার করতে পারেন।

Complex Filtering দিয়ে Message Routing কিভাবে কাজ করে

  1. Message Properties সেট করা: প্রথমে প্রোডিউসার মেসেজ পাঠানোর সময় মেসেজের কাস্টম প্রপার্টি নির্ধারণ করে। উদাহরণস্বরূপ, মেসেজের মধ্যে একটি প্রপার্টি হতে পারে category, যা নির্দিষ্ট শ্রেণীভুক্ত মেসেজগুলো আলাদা করতে সাহায্য করবে।
  2. Selector তৈরি করা: তারপর কনজিউমার (consumer) মেসেজ গ্রহন করার সময় JMS selector ব্যবহার করে নির্দিষ্ট শর্ত বা কন্ডিশন দিয়ে ফিল্টার করা হয়। যেমন, category='electronics' শর্তে শুধু electronics ক্যাটেগরির মেসেজগুলো গ্রহণ করা যাবে।
  3. Message Routing: ফিল্টারিং করা মেসেজটি সঠিক ভোক্তাকে রাউট করা হয়। একাধিক কনজিউমার যখন একসাথে একটি কিউ বা টপিক থেকে মেসেজ গ্রহণ করে, তখন কনজিউমারদের নির্দিষ্ট শর্ত অনুযায়ী মেসেজটি রাউট করা হয়।

উদাহরণ:

  1. Producer Code (প্রোডিউসার মেসেজ পাঠানোর সময় প্রপার্টি নির্ধারণ):
import javax.jms.*;

public class Producer {
    public void sendMessage(Session session, MessageProducer producer) throws JMSException {
        TextMessage message = session.createTextMessage("This is a test message");
        message.setStringProperty("category", "electronics");  // Setting custom property
        producer.send(message);
    }
}
  1. Consumer Code (কনজিউমার JMS selector দিয়ে ফিল্টারিং করবে):
import javax.jms.*;

public class Consumer {
    public void receiveMessage(Session session, MessageConsumer consumer) throws JMSException {
        // Using a JMS selector to filter messages based on the category property
        String selector = "category = 'electronics'";  
        MessageConsumer filteredConsumer = session.createConsumer(queue, selector);
        
        TextMessage message = (TextMessage) filteredConsumer.receive();
        if (message != null) {
            System.out.println("Received message: " + message.getText());
        }
    }
}

এখানে:

  • Producer: category নামে একটি কাস্টম প্রপার্টি যোগ করেছে, যেটি electronics নামে সেট করা হয়েছে।
  • Consumer: একটি JMS selector ব্যবহার করে কেবলমাত্র category='electronics' প্রপার্টি যুক্ত মেসেজগুলো গ্রহণ করবে।

Complex Filtering-এর কনফিগারেশন

এছাড়া, অ্যাকটিভএমকিউ-এ আপনি কিউ বা টপিক কনফিগারেশনের সময় JMS selectors ব্যবহার করতে পারেন। উদাহরণস্বরূপ:

<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry queue=">" messageSelector="category = 'electronics'"/>
        </policyEntries>
    </policyMap>
</destinationPolicy>

এখানে, category = 'electronics' মেসেজটি কেবলমাত্র সেসব কনজিউমারকে পাঠানো হবে যারা এই শর্তে সাবস্ক্রাইব করেছে।

Complex Filtering এর সুবিধা

  • Targeted Message Delivery: মেসেজের প্রপার্টি অনুযায়ী নির্দিষ্ট কনজিউমারদের কাছে মেসেজ পাঠানো যায়, যা মেসেজ সিস্টেমের কার্যকারিতা বাড়ায়।
  • Reduced Overhead: শুধুমাত্র প্রয়োজনীয় মেসেজ কনজিউমারদের কাছে পাঠানো হয়, ফলে অতিরিক্ত লোড কমে যায়।
  • Scalability: কনজিউমাররা বিভিন্ন ধরনের শর্তে সাবস্ক্রাইব করতে পারে, যা সিস্টেমে স্কেলেবিলিটি নিয়ে আসে।

সারাংশ

  • Complex Filtering অ্যাকটিভএমকিউ-তে মেসেজ রাউটিং এবং ফিল্টারিং করার শক্তিশালী একটি পদ্ধতি।
  • JMS Selectors ব্যবহার করে মেসেজের প্রপার্টি অনুযায়ী ফিল্টারিং করা যায়।
  • এটি message routing প্রক্রিয়াকে আরও দক্ষ এবং টার্গেটেড করে তোলে, যাতে শুধুমাত্র প্রয়োজনীয় মেসেজ সঠিক কনজিউমারদের কাছে পৌঁছায়।
  • কনফিগারেশন এবং কোডের মাধ্যমে প্রপার্টি নির্ধারণ এবং ফিল্টারিং নিয়ম তৈরি করা সম্ভব।

এই ফিচারটি অ্যাকটিভএমকিউ-কে আরও গতিশীল এবং কার্যকরী মেসেজ ব্রোকার হিসেবে পরিণত করে।

common.content_added_by

Priority এবং Expiration ব্যবহার করে Message Handling

135
135

অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি শক্তিশালী মেসেজ ব্রোকার যা মেসেজিং সিস্টেমের মধ্যে উচ্চ কার্যকারিতা এবং ফ্লেক্সিবিলিটি প্রদান করে। মেসেজগুলির জন্য Priority (প্রায়োরিটি) এবং Expiration (এক্সপিরেশন) ব্যবহার করে, আপনি মেসেজ প্রেরণ এবং গ্রহণের প্রক্রিয়াকে আরও নির্ভুল এবং কার্যকরী করতে পারেন। এই দুটি বৈশিষ্ট্য মেসেজ হ্যান্ডলিং সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন আপনাকে মেসেজের গুরুত্ব বা মেয়াদ নির্ধারণ করতে হয়।


Priority (প্রায়োরিটি) ব্যবহার করে মেসেজ হ্যান্ডলিং

Priority মেসেজ হ্যান্ডলিং ব্যবস্থায় মেসেজের গুরুত্ব বা অগ্রাধিকার নির্ধারণ করে। অ্যাপাচি অ্যাকটিভএমকিউতে মেসেজের জন্য Priority ব্যবহার করলে, আপনি মেসেজগুলির প্রক্রিয়াকরণে অগ্রাধিকার দিতে পারবেন। মেসেজের প্রাথমিক উদ্দেশ্য হল, যদি কোনো কিউতে একাধিক মেসেজ থাকে, তবে উচ্চ_PRIORITY মেসেজগুলি প্রথমে প্রক্রিয়া করা হবে।

Priority কীভাবে কাজ করে?

অ্যাপাচি অ্যাকটিভএমকিউতে প্রতিটি মেসেজের একটি priority (0 থেকে 9 এর মধ্যে) থাকে:

  • 0 হলো সর্বনিম্ন_PRIORITY, এবং
  • 9 হলো সর্বোচ্চ_PRIORITY।

যখন একটি মেসেজ কিউতে জমা হয়, তখন এটি কিউতে অন্যান্য মেসেজের তুলনায় বেশি_PRIORITY মেসেজ হিসেবে এগিয়ে যাবে, এবং আগে প্রক্রিয়া করা হবে। এটি গুরুত্বপূর্ণ যখন আপনি কিছু মেসেজকে দ্রুত প্রক্রিয়া করতে চান, যেমন জরুরি বা অগ্রাধিকারের কাজ।

Priority সেট করার উদাহরণ

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class PriorityMessageProducer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("PriorityQueue");

        MessageProducer producer = session.createProducer(destination);
        
        // Set Priority (higher value means higher priority)
        producer.setPriority(9); // Highest priority
        
        TextMessage message = session.createTextMessage("This is a high priority message");
        
        producer.send(message);
        System.out.println("Message sent with priority: " + message.getJMSPriority());

        connection.close();
    }
}

এখানে, setPriority(9) ব্যবহার করে মেসেজের উচ্চ_PRIORITY (9) সেট করা হয়েছে। এর ফলে, এই মেসেজটি অন্যান্য মেসেজগুলোর তুলনায় আগে প্রক্রিয়া হবে।

Priority Consumer Handling

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class PriorityMessageConsumer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("PriorityQueue");

        MessageConsumer consumer = session.createConsumer(destination);

        Message message = consumer.receive();
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received message with priority: " + textMessage.getJMSPriority());
            System.out.println("Message: " + textMessage.getText());
        }

        connection.close();
    }
}

এই কোডে কনজিউমার কিউ থেকে মেসেজ গ্রহণ করে এবং মেসেজের priority বের করে।


Expiration (এক্সপিরেশন) ব্যবহার করে মেসেজ হ্যান্ডলিং

Expiration মেসেজের মেয়াদ বা মেয়াদ শেষ হওয়া নির্ধারণ করে। এটি মেসেজের জন্য একটি নির্দিষ্ট সময়কাল নির্ধারণ করতে সহায়তা করে, যার পরে মেসেজটি কিউ থেকে মুছে যাবে বা অপ্রচলিত হয়ে যাবে। যদি একটি মেসেজের মেয়াদ শেষ হয়ে যায়, তবে সেটি কনজিউমারের কাছে পৌঁছানোর আগে কিউ থেকে সরিয়ে ফেলা হবে।

Expiration কীভাবে কাজ করে?

  • JMS Expiration প্রপার্টি ব্যবহার করে, আপনি মেসেজের জন্য একটি মেয়াদ (time-to-live) নির্ধারণ করতে পারেন।
  • যদি একটি মেসেজ তার নির্ধারিত সময়ের মধ্যে গ্রাহকের কাছে না পৌঁছায়, তবে সেটি কিউ থেকে সরিয়ে ফেলা হবে।

Expiration সেট করার উদাহরণ

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ExpirationMessageProducer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("ExpirationQueue");

        MessageProducer producer = session.createProducer(destination);
        
        // Set expiration time (milliseconds)
        long expirationTime = 5000; // 5 seconds
        TextMessage message = session.createTextMessage("This message will expire in 5 seconds");
        
        producer.setTimeToLive(expirationTime);
        producer.send(message);
        System.out.println("Message sent with expiration time: " + expirationTime);

        connection.close();
    }
}

এখানে, setTimeToLive(5000) ব্যবহার করে মেসেজের জন্য 5 সেকেন্ডের এক্সপিরেশন সময় সেট করা হয়েছে। এর মানে হলো, ৫ সেকেন্ডের মধ্যে মেসেজ কনজিউমারের কাছে পৌঁছানোর জন্য প্রক্রিয়াকরণ না হলে, এটি কিউ থেকে সরিয়ে ফেলা হবে।

Expiration Consumer Handling

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ExpirationMessageConsumer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("ExpirationQueue");

        MessageConsumer consumer = session.createConsumer(destination);

        // Receiving expired message (if any)
        Message message = consumer.receive(6000); // wait for 6 seconds

        if (message == null) {
            System.out.println("No message received or message expired.");
        } else if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received message: " + textMessage.getText());
        }

        connection.close();
    }
}

এই কোডে, কনজিউমার ৬ সেকেন্ড অপেক্ষা করে এবং যদি মেসেজ এক্সপায়ার্ড না হয়, তবে সেটি গ্রহণ করা হয়।


Priority এবং Expiration এর মধ্যে পার্থক্য

বৈশিষ্ট্যPriority (প্রায়োরিটি)Expiration (এক্সপিরেশন)
ফাংশনমেসেজের অগ্রাধিকার বা গুরুত্ব নির্ধারণমেসেজের মেয়াদ নির্ধারণ, মেয়াদ শেষ হলে মেসেজ মুছে ফেলা
ব্যবহারজরুরি বা গুরুত্বপূর্ণ মেসেজ আগে প্রক্রিয়া করতে ব্যবহৃতমেসেজ কিউ থেকে অপসারণের জন্য নির্দিষ্ট সময় পর মেসেজ এক্সপায়ার করা
মান0 থেকে 9 (9 সবচেয়ে বেশি)মিলিসেকেন্ডে সময় নির্ধারণ
কিউ প্রক্রিয়াসর্বোচ্চ_PRIORITY মেসেজ প্রথমে প্রক্রিয়া হয়এক্সপায়ার হওয়ার পরে মেসেজ কিউ থেকে সরিয়ে ফেলা হয়

সারাংশ

অ্যাপাচি অ্যাকটিভএমকিউ Priority এবং Expiration ব্যবহার করে মেসেজ হ্যান্ডলিং-এর কার্যক্ষমতা বাড়ানো যায়। Priority ব্যবহার করে মেসেজগুলির গুরুত্ব নির্ধারণ করা যায়, যেখানে উচ্চ_PRIORITY মেসেজগুলি আগে প্রক্রিয়া করা হয়। Expiration ব্যবহার করে, মেসেজের মেয়াদ নির্ধারণ করা হয়, এবং এক্সপায়ার হওয়ার পর মেসেজ কিউ থেকে সরিয়ে ফেলা হয়। এই দুটি বৈশিষ্ট্য মেসেজ প্রক্রিয়াকরণে আরও নিয়ন্ত্রণ এবং কার্যক্ষমতা নিয়ে আসে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion