কম্পিউটার টিউটোরিয়াল

জেডিস দিয়ে রেডিস পাব/সাব ইমপ্লিমেন্টেশন: ধাপে ধাপে গাইড

এই টিউটোরিয়ালে, আমরা শিখব কিভাবে জেডিস লাইব্রেরি ব্যবহার করে রেডিস পাব সাব সিস্টেম ইমপ্লিমেন্ট করা যায়।

জেডিস লাইব্রেরি

জেডিস রেডিস ডেটাস্টোরের জন্য একটি জাভা ক্লায়েন্ট লাইব্রেরি। এটি ছোট এবং খুব সহজে ব্যবহারযোগ্য, এবং রেডিস ২.৮.x, ৩.x.x এবং এর উপরের ভার্সনদের সাথে পুরোপুরি কম্প্যাটিবল। জেডিস লাইব্রেরি সম্পর্কে আরও জানতে এখানে দেখুন।

রেডিস পাব/সাব সিস্টেম

রেডিস পাবলিশ/সাবস্ক্রাইব মেসেজিং প্যারাডাইম বাস্তবায়ন করে। এই মেসেজিং প্যারাডাইম অনুযায়ী, মেসেজের প্রেরক (পাবলিশার) সরাসরি কোনো নির্দিষ্ট গ্রাহক (সাবস্ক্রাইবারের) কাছে মেসেজ পাঠাতে প্রোগ্রাম্ড নয়। তারা তাদের মেসেজ একটি নির্দিষ্ট চ্যানেলে পাবলিশ করে, না জানেই কোনো গ্রাহক সেটি কনসিউম করবে কিনা। একজন গ্রাহক, যিনি মেসেজ কনসিউম করতে চান, এক বা একাধিক চ্যানেলে সাবস্ক্রাইব করে তাদের আগ্রহ প্রকাশ করেন, এবং তারা শুধু সেই চ্যানেলগুলোর মেসেজগুলো গ্রহণ করবে, না জানেই কোন প্রেরক মেসেজটি পাঠিয়েছে। রেডিস পাব/সাব সিস্টেম সম্পর্কে আরও জানতে এখানে দেখুন।

প্রজেক্ট সেটআপ

আপনার পছন্দের IDE-এ একটি সিম্পল মেভেন প্রজেক্ট তৈরি করুন এবং নিচে উল্লেখিত ডিপেন্ডেন্সি আপনার pom.xml ফাইলে যোগ করুন।

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.0.1</version> </dependency>

জেডিস লাইব্রেরির লেটেস্ট ভার্সনের জন্য এই পেজ চেক করুন।

রেডিস ইনস্টলেশন

আপনাকে রেডিসের লেটেস্ট ভার্সন ইনস্টল করতে হবে। রেডিস ইনস্টলেশন সম্পর্কে আরও জানতে এই পেজ চেক করুন।

জেডিস কানেকশন

Jedis (redis.clients.jedis.Jedis) ক্লাসের একটি অবজেক্ট তৈরি করুন আপনার জাভা কোডকে রেডিসের সাথে কানেক্ট করার জন্য।

Jedis jedis = new Jedis();

যদি আপনি আপনার লোকাল মেশিনে ডিফল্ট পোর্ট (৬৩৭৯)-এ একটি রেডিস সার্ভিস চালু করে থাকেন, তবে ডিফল্ট কনস্ট্রাক্টর ঠিকঠাক কাজ করবে। অন্যথায় আপনাকে কনস্ট্রাক্টরে সঠিক হোস্ট ইউআরএল এবং পোর্ট নম্বর আর্গুমেন্ট হিসেবে পাস করতে হবে।

চ্যানেলে সাবস্ক্রাইব করুন

"ChannelSubscribe" নামক একটি ক্লাস তৈরি করুন, এই ক্লাস C1 এবং C2 চ্যানেলে একটি ক্লায়েন্ট তৈরি করে সাবস্ক্রাইব করবে। এই ক্লায়েন্ট একটি মেসেজ পাবে, যখন অন্য কোনো ক্লায়েন্ট চ্যানেল C1 বা চ্যানেল C2-এ মেসেজ পাবলিশ করবে।

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class ChannelSubscribe {
    public static void main(String[] args) {
        Jedis jedis = null;
        try {
            /* রেডিস সার্ভারের সাথে কানেক্ট করার জন্য জেডিস অবজেক্ট তৈরি */
            jedis = new Jedis();
            /* চ্যানেলে সাবস্ক্রাইব করার জন্য জেডিসপাবসাব অবজেক্ট তৈরি */
            JedisPubSub jedisPubSub = new JedisPubSub() {
                @Override
                public void onMessage(String channel, String message) {
                    System.out.println("Channel " + channel + " has sent a message : " + message );
                    if(channel.equals("C1")) {
                        /* প্রথম মেসেজ পাওয়ার পর চ্যানেল C1 থেকে আনসাবস্ক্রাইব করুন। */
                        unsubscribe(channel);
                    }
                }
                @Override
                public void onSubscribe(String channel, int subscribedChannels) {
                    System.out.println("Client is Subscribed to channel : "+ channel);
                    System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
                }
                @Override
                public void onUnsubscribe(String channel, int subscribedChannels) {
                    System.out.println("Client is Unsubscribed from channel : "+ channel);
                    System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of channels");
                }
            };
            /* চ্যানেল C1 এবং C2-এ সাবস্ক্রাইব করুন */
            jedis.subscribe(jedisPubSub, "C1", "C2");
        } catch(Exception ex) {
            System.out.println("Exception : " + ex.getMessage());
        } finally {
            if(jedis != null) {
                jedis.close();
            }
        }
    }
}

আউটপুট

"ChannelSubscribe" ক্লাস রান করালে আউটপুট হবে নিম্নরূপ:

জেডিস দিয়ে রেডিস পাব/সাব ইমপ্লিমেন্টেশন: ধাপে ধাপে গাইড

চ্যানেলে পাবলিশ করুন

"ChannelPublish" নামক একটি ক্লাস তৈরি করুন, এই ক্লাস জেডিস কানেকশন ব্যবহার করে রেডিস সার্ভারের সাথে কানেক্ট হবে এবং চ্যানেল C1 এবং C2-এ দুটি করে মেসেজ পাবলিশ করবে।

import redis.clients.jedis.Jedis;

public class ChannelPublish {
    public static void main(String[] args) {
        Jedis jedis = null;
        try {
            /* রেডিস সার্ভারের সাথে কানেক্ট করার জন্য জেডিস অবজেক্ট তৈরি */
            jedis = new Jedis();
            /* চ্যানেল C1-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C1", "First message to channel C1");
            /* চ্যানেল C2-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C2", "First message to channel C2");
            /* চ্যানেল C1-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C1", "Second message to channel C1");
            /* চ্যানেল C2-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C2", "Second message to channel C2");
        } catch(Exception ex) {
            System.out.println("Exception : " + ex.getMessage());
        } finally {
            if(jedis != null) {
                jedis.close();
            }
        }
    }
}

আউটপুট

"ChannelPublish" ক্লাস রান করালে ChannelSubscribe কনসোলে আউটপুট হবে নিম্নরূপ:

জেডিস দিয়ে রেডিস পাব/সাব ইমপ্লিমেন্টেশন: ধাপে ধাপে গাইড

প্যাটার্নে সাবস্ক্রাইব করুন

"PatternSubscribe" নামক একটি ক্লাস তৈরি করুন, এই ক্লাস C* এবং D? প্যাটার্নে একটি ক্লায়েন্ট তৈরি করে সাবস্ক্রাইব করবে।

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

public class PatternSubscribe {
    public static void main(String[] args) {
        Jedis jedis = null;
        try {
            /* রেডিস সার্ভারের সাথে কানেক্ট করার জন্য জেডিস অবজেক্ট তৈরি */
            jedis = new Jedis();
            /* চ্যানেলে সাবস্ক্রাইব করার জন্য জেডিসপাবসাব অবজেক্ট তৈরি */
            JedisPubSub jedisPubSub = new JedisPubSub() {
                @Override
                public void onPMessage(String pattern, String channel, String message) {
                    System.out.println("Channel " +channel+ " has sent a message : " +message+ " on pattern " + pattern);
                    if(pattern.equals("C*")) {
                        /* প্রথম মেসেজ পাওয়ার পর প্যাটার্ন C* থেকে আনসাবস্ক্রাইব করুন। */
                        punsubscribe(pattern);
                    }
                }
                @Override
                public void onPSubscribe(String pattern, int subscribedChannels) {
                    System.out.println("Client is Subscribed to pattern : "+ pattern);
                    System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
                }
                @Override
                public void onPUnsubscribe(String pattern, int subscribedChannels) {
                    System.out.println("Client is Unsubscribed from pattern : "+ pattern);
                    System.out.println("Client is Subscribed to "+ subscribedChannels + " no. of patterns");
                }
            };
            /* চ্যানেল C1 এবং C2-এ সাবস্ক্রাইব করুন */
            jedis.psubscribe(jedisPubSub, "C*", "D?");
        } catch(Exception ex) {
            System.out.println("Exception : " + ex.getMessage());
        } finally {
            if(jedis != null) {
                jedis.close();
            }
        }
    }
}

আউটপুট

"PatternSubscribe" ক্লাস রান করালে আউটপুট হবে নিম্নরূপ:

জেডিস দিয়ে রেডিস পাব/সাব ইমপ্লিমেন্টেশন: ধাপে ধাপে গাইড

প্যাটার্নে পাবলিশ করুন

"PatternPublish" নামক একটি ক্লাস তৈরি করুন, এই ক্লাস জেডিস কানেকশন ব্যবহার করে রেডিস সার্ভারের সাথে কানেক্ট হবে এবং চ্যানেল C13, D2, C134, এবং D3-এ মেসেজ পাবলিশ করবে।

import redis.clients.jedis.Jedis;

public class PatternPublish {
    public static void main(String[] args) {
        Jedis jedis = null;
        try {
            /* রেডিস সার্ভারের সাথে কানেক্ট করার জন্য জেডিস অবজেক্ট তৈরি */
            jedis = new Jedis();
            /* চ্যানেল C13-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C13", "Message to channel C13");
            /* চ্যানেল D2-এ মেসেজ পাবলিশ করুন */
            jedis.publish("D2", "Message to channel D2");
            /* চ্যানেল C134-এ মেসেজ পাবলিশ করুন */
            jedis.publish("C134", "Message to channel C134");
            /* চ্যানেল D3-এ মেসেজ পাবলিশ করুন */
            jedis.publish("D3", "Message to channel D3");
        } catch(Exception ex) {
            System.out.println("Exception : " + ex.getMessage());
        } finally {
            if(jedis != null) {
                jedis.close();
            }
        }
    }
}

আউটপুট

"PatternPublish" ক্লাস রান করালে PatternSubscribe কনসোলে আউটপুট হবে নিম্নরূপ:

জেডিস দিয়ে রেডিস পাব/সাব ইমপ্লিমেন্টেশন: ধাপে ধাপে গাইড

রেফারেন্স:

  1. পাব সাব কমান্ড ডক্স

জেডিস লাইব্রেরি ব্যবহার করে রেডিস পাব সাব সিস্টেম ইমপ্লিমেন্ট করার প্রক্রিয়া এতে সম্পন্ন। যদি আপনার ভালো লাগে, তবে মন্তব্য অংশে আপনার মতামত শেয়ার করুন এবং অন্যদেরও শেয়ার করুন।

  1. রেডিস পাব/সাব: রেডিস দিয়ে স্কেলেবল মেসেজ ব্রোকার তৈরি করুন

  2. রেডিস UNSUBSCRIBE: একাধিক চ্যানেল থেকে দক্ষতার সাথে আনসাবস্ক্রাইব করুন

  3. রেডিস PUBLISH: রেডিস পাব/সাব দিয়ে মেসেজ পাবলিশ করার বিস্তারিত গাইড

  4. রেডিস পাব/সাব মাস্টার করুন: redis-cli দিয়ে একাধিক চ্যানেলে সাবস্ক্রাইব করুন