Hazelcast Events এবং Listeners ডিস্ট্রিবিউটেড সিস্টেমে রিয়েল-টাইম ডেটা পরিবর্তন এবং কার্যকলাপের ওপর নজর রাখতে সাহায্য করে। Hazelcast-এ ইভেন্ট এবং লিসেনার ব্যবহারের মাধ্যমে আপনি ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারগুলির (যেমন IMap
, IQueue
, ইত্যাদি) ওপর ঘটিত বিভিন্ন পরিবর্তন ট্র্যাক করতে পারেন এবং সেগুলোর ওপর নির্দিষ্ট কাজ বা হ্যান্ডলিং প্রয়োগ করতে পারেন। এটি ক্লাস্টারের কর্মক্ষমতা পর্যবেক্ষণ করতে এবং ডেটা ইন্টিগ্রিটি বজায় রাখতে সহায়ক।
Hazelcast-এ ইভেন্ট সাধারণত ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার এর ওপর ঘটে, যেমন যখন কোনও মান ইনসার্ট, আপডেট বা মুছে ফেলা হয়, অথবা একটি নোড ক্লাস্টারে যোগ বা অপসারিত হয়। এগুলি সাধারণত মেম্বারশিপ, ডেটা চেঞ্জ বা ইভেন্টগুলির মধ্যে বিভিন্ন পরিবর্তনের সূচনা করে।
Hazelcast বিভিন্ন ধরনের ইভেন্ট পরিচালনা করতে সক্ষম:
IMap
, IQueue
, IList
, ISet
ইত্যাদির ওপর পরিবর্তন।IMap
এর মধ্যে কোনও এন্ট্রি যোগ, আপডেট, অথবা মুছে ফেলা।Hazelcast-এ Listeners হল বিশেষ ধরনের কাস্টম ফাংশন যা একটি ইভেন্ট ঘটে যাওয়ার পর ট্রিগার হয় এবং সেই ইভেন্টের ওপর নির্দিষ্ট কাজ করে। উদাহরণস্বরূপ, আপনি যখন একটি IMap
-এ কোনও নতুন এন্ট্রি যুক্ত করবেন, তখন একটি MapListener
ব্যবহার করে সেই পরিবর্তনটি ট্র্যাক করতে পারবেন।
Hazelcast-এ বিভিন্ন ধরনের ডেটা স্ট্রাকচার লিসেনার রয়েছে, যেমন MapListener
, QueueListener
, ইত্যাদি, যা নির্দিষ্ট ডেটা স্ট্রাকচারের ওপর পরিবর্তন ট্র্যাক করতে সাহায্য করে।
IMap
এর জন্য MapListener ব্যবহার করে, আপনি ডেটার প্রতি পরিবর্তন ট্র্যাক করতে পারেন, যেমন একটি নতুন এন্ট্রি যোগ করা, এন্ট্রি পরিবর্তন বা মুছে ফেলা। নিচে একটি উদাহরণ দেওয়া হলো:
import com.hazelcast.core.MapListener;
import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;
public class MyMapListener implements MapListener {
@Override
public void entryAdded(EntryEvent event) {
System.out.println("Entry added: " + event.getKey() + " -> " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent event) {
System.out.println("Entry removed: " + event.getKey());
}
@Override
public void entryUpdated(EntryEvent event) {
System.out.println("Entry updated: " + event.getKey() + " -> " + event.getValue());
}
@Override
public void entryEvicted(EntryEvent event) {
System.out.println("Entry evicted: " + event.getKey());
}
}
এখানে MyMapListener
ক্লাসটি IMap
এর উপরে যেকোনো ধরনের পরিবর্তন ট্র্যাক করবে এবং তার সাথে সংশ্লিষ্ট মেসেজ প্রদর্শন করবে।
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hz.getMap("myMap");
map.addEntryListener(new MyMapListener(), true); // "true" means listening for all events
map.put("key1", "value1");
map.put("key2", "value2");
map.remove("key1");
এখানে addEntryListener
পদ্ধতিটি ক্লাস্টারের IMap
-এ কোনো এন্ট্রি পরিবর্তন হওয়ার সাথে সাথে উপরের লিসেনারকে ট্রিগার করবে।
ClusterListener ক্লাস্টারের সদস্যদের যোগ হওয়া বা অপসারণ হওয়ার সময়ও ইভেন্ট হতে পারে। আপনি MembershipListener ব্যবহার করে ক্লাস্টারের সদস্যদের পরিবর্তন ট্র্যাক করতে পারেন।
import com.hazelcast.core.MembershipEvent;
import com.hazelcast.core.MembershipListener;
import com.hazelcast.core.HazelcastInstance;
public class MyMembershipListener implements MembershipListener {
@Override
public void memberAdded(MembershipEvent membershipEvent) {
System.out.println("New member added: " + membershipEvent.getMember().getAddress());
}
@Override
public void memberRemoved(MembershipEvent membershipEvent) {
System.out.println("Member removed: " + membershipEvent.getMember().getAddress());
}
}
এটি MembershipListener
ব্যবহার করে Hazelcast ক্লাস্টারে নতুন সদস্য যোগ বা অপসারণ হওয়ার সময় ট্রিগার হবে। আপনি ক্লাস্টারের সদস্যদের যুক্ত হওয়া বা অপসারণ হওয়া সম্পর্কিত তথ্য পেতে পারেন।
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
hz.getCluster().addMembershipListener(new MyMembershipListener());
এখানে addMembershipListener
ক্লাস্টারের সদস্যের পরিবর্তনের সময় ইভেন্ট শোনা শুরু করবে।
IMap
এর জন্য EntryListener ব্যবহার করা যেতে পারে। এর মাধ্যমে আপনি put
, remove
, update
ইত্যাদি ক্রিয়াগুলোর ওপর নজর রাখতে পারবেন। এটি সদস্য যোগ হওয়া এবং তার সাথে সংশ্লিষ্ট ডেটা পরিবর্তন ট্র্যাক করে।
import com.hazelcast.map.listener.EntryAddedListener;
import com.hazelcast.map.listener.EntryRemovedListener;
import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.HazelcastInstance;
public class MyEntryListener implements EntryAddedListener<String, String>, EntryRemovedListener<String, String> {
@Override
public void entryAdded(EntryEvent<String, String> event) {
System.out.println("Added: " + event.getKey() + " -> " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
System.out.println("Removed: " + event.getKey());
}
}
এখানে EntryAddedListener
এবং EntryRemovedListener
এর মাধ্যমে IMap
এর উপর যেকোনো নতুন এন্ট্রি যোগ বা অপসারণের পরিবর্তন ট্র্যাক করা যাচ্ছে।
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hz.getMap("exampleMap");
map.addEntryListener(new MyEntryListener(), true);
map.put("key1", "value1");
map.remove("key1");
Hazelcast Events এবং Listeners হল ডিস্ট্রিবিউটেড সিস্টেমে ডেটার পরিবর্তন এবং কার্যকলাপ ট্র্যাক করার অত্যন্ত কার্যকরী সরঞ্জাম। MapListener
, EntryListener
, এবং MembershipListener
ব্যবহার করে আপনি সিস্টেমের বিভিন্ন পর্যায়ে পরিবর্তনগুলোর ওপর নজর রাখতে পারেন এবং সেগুলোর উপরে নির্দিষ্ট কার্যাবলী বা রেসপন্স প্রয়োগ করতে পারেন। এর মাধ্যমে Hazelcast ক্লাস্টারের কার্যকারিতা উন্নত করা এবং রিয়েল-টাইম ডেটা প্রক্রিয়াজাতকরণ সম্ভব হয়।
Hazelcast-এ EntryListener, ItemListener, এবং MapListener হল ইভেন্ট-ভিত্তিক শ্রোতা (listener) যা ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারের পরিবর্তন বা ইভেন্টগুলি মনিটর করতে ব্যবহৃত হয়। এই লিসেনারগুলির মাধ্যমে আপনি ডেটা পরিবর্তন, যোগ বা মুছে ফেলার সময় দ্রুত প্রতিক্রিয়া জানাতে পারেন এবং একটি রিয়েল-টাইম ব্যবস্থায় সিস্টেমের অবস্থা ট্র্যাক করতে পারেন।
Hazelcast ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার যেমন IMap
, IQueue
, ISet
ইত্যাদির জন্য বিভিন্ন ধরণের ইভেন্ট শোনা যায়। আপনি যখন একটি ডেটা স্ট্রাকচারে কোনো পরিবর্তন করবেন, তখন এই listeners আপনাকে সেই পরিবর্তন সম্পর্কে অবহিত করবে।
EntryListener হল একটি ইন্টারফেস যা IMap (ডিস্ট্রিবিউটেড ম্যাপ) এর এন্ট্রি পরিবর্তন মনিটর করতে ব্যবহৃত হয়। এটি put, remove, update, evict ইত্যাদি অপারেশনগুলির সময় ইভেন্ট শোনার জন্য ব্যবহৃত হয়।
import com.hazelcast.core.EntryListener;
import com.hazelcast.map.EntryEvent;
import com.hazelcast.map.IMap;
public class MyEntryListener implements EntryListener<String, String> {
@Override
public void entryAdded(EntryEvent<String, String> event) {
System.out.println("Entry added: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
System.out.println("Entry removed: " + event.getKey());
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
System.out.println("Entry updated: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
System.out.println("Entry evicted: " + event.getKey());
}
}
এখানে, EntryListener ইন্টারফেসে চারটি প্রধান ইভেন্ট মেথড রয়েছে:
IMap<String, String> map = hazelcastInstance.getMap("exampleMap");
map.addEntryListener(new MyEntryListener(), true); // true for synchronous
ItemListener হল একটি ইন্টারফেস যা IQueue, ISet এবং IList এর মতো ডিস্ট্রিবিউটেড কালেকশন এর জন্য ব্যবহৃত হয়। এটি add, remove, clear ইত্যাদি অপারেশনের সময় ইভেন্ট শোনার জন্য ব্যবহৃত হয়।
import com.hazelcast.core.ItemEvent;
import com.hazelcast.core.ItemListener;
import com.hazelcast.collection.IQueue;
public class MyItemListener implements ItemListener<String> {
@Override
public void itemAdded(ItemEvent<String> item) {
System.out.println("Item added: " + item.getItem());
}
@Override
public void itemRemoved(ItemEvent<String> item) {
System.out.println("Item removed: " + item.getItem());
}
}
এখানে, ItemListener ইন্টারফেসে দুটি প্রধান ইভেন্ট মেথড রয়েছে:
IQueue<String> queue = hazelcastInstance.getQueue("exampleQueue");
queue.addItemListener(new MyItemListener(), true); // true for synchronous
MapListener হল একটি ইন্টারফেস যা IMap এর জন্য ব্যবহৃত হয় এবং এটি ম্যাপের পরিবর্তন, যেমন put, remove, clear ইত্যাদি ইভেন্ট মনিটর করে। যদিও EntryListener ইন্টারফেসটি বেশি ব্যবহৃত হয়, MapListener এছাড়াও ব্যবহার করা যেতে পারে যদি আপনি সম্পূর্ণ ম্যাপের পরিবর্তন শোনার প্রয়োজন অনুভব করেন।
import com.hazelcast.core.MapEvent;
import com.hazelcast.core.MapListener;
import com.hazelcast.map.IMap;
public class MyMapListener implements MapListener {
@Override
public void mapCleared(MapEvent event) {
System.out.println("Map cleared");
}
@Override
public void mapEvicted(MapEvent event) {
System.out.println("Map evicted");
}
}
এখানে, MapListener ইন্টারফেসে দুটি প্রধান ইভেন্ট মেথড রয়েছে:
IMap<String, String> map = hazelcastInstance.getMap("exampleMap");
map.addMapListener(new MyMapListener());
বৈশিষ্ট্য | EntryListener | ItemListener | MapListener |
---|---|---|---|
ব্যবহার | IMap এর এন্ট্রি পরিবর্তন মনিটর করতে | IQueue, ISet, IList এর আইটেম পরিবর্তন | IMap এর পুরো ম্যাপ পরিবর্তন |
ইভেন্ট | EntryAdded, EntryRemoved, EntryUpdated, EntryEvicted | ItemAdded, ItemRemoved | MapCleared, MapEvicted |
অপারেশন | ডেটা স্ট্রাকচারের এন্ট্রি (key-value) এর উপর কাজ করে | আইটেম যোগ বা মুছে ফেলার উপর কাজ করে | পুরো ম্যাপ বা এর কোনো অংশের পরিবর্তন |
সিনক্রোনাইজেশন | সিঙ্ক্রোনাস বা অ্যাসিনক্রোনাসভাবে কাজ করা যায় | সিঙ্ক্রোনাস বা অ্যাসিনক্রোনাসভাবে কাজ করা যায় | সাধারণত অ্যাসিনক্রোনাস, তবে সিঙ্ক্রোনাসও হতে পারে |
EntryListener, ItemListener, এবং MapListener হল Hazelcast এর ইভেন্ট-ভিত্তিক শ্রোতা (listeners) যা ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারের উপর কার্যকরী পরিবর্তন বা ইভেন্টগুলি মনিটর করতে ব্যবহৃত হয়। EntryListener একক এন্ট্রি পরিবর্তন মনিটর করতে, ItemListener ডিস্ট্রিবিউটেড কালেকশনে আইটেম যোগ বা মুছে ফেলা, এবং MapListener পুরো ম্যাপের পরিবর্তন ট্র্যাক করতে সহায়ক। এই listeners ব্যবহার করে আপনি Hazelcast ডিস্ট্রিবিউটেড সিস্টেমে রিয়েল-টাইম ডেটা পরিবর্তন মনিটর করতে পারেন এবং দ্রুত প্রতিক্রিয়া জানাতে পারেন।
Distributed Events Management হল একটি পদ্ধতি যার মাধ্যমে Hazelcast ক্লাস্টারে real-time events এবং changes ম্যানেজ করা হয়। Hazelcast-এর distributed events ব্যবস্থাপনা ক্লাস্টারে থাকা বিভিন্ন ডেটা স্ট্রাকচার, যেমন IMap
, IQueue
, IList
, ইত্যাদিতে ডেটার পরিবর্তনগুলো distributedভাবে শেয়ার এবং ম্যানেজ করার জন্য ব্যবহৃত হয়। এতে ডিস্ট্রিবিউটেড সিস্টেমে ইভেন্ট ট্রিগার এবং রিয়েল-টাইম ডেটা প্রসেসিং করা যায়।
Hazelcast ইভেন্ট সিস্টেম ব্যবহারকারীদের জন্য সুবিধাজনক হতে পারে যখন তারা real-time notifications, data updates, এবং changes অনুসরণ করতে চান। উদাহরণস্বরূপ, আপনি যদি একটি distributed cache বা data store ব্যবহার করেন এবং কোনো ডেটা পরিবর্তন হলে তা অন্যান্য সিস্টেম বা ক্লায়েন্টে জানাতে চান, তাহলে এই ইভেন্ট সিস্টেমটি ব্যবহার করা হতে পারে।
Entry Listener হল একটি ইভেন্ট লিসেনার যা IMap
বা অন্যান্য ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারের উপর কাজ করে এবং এন্ট্রি পরিবর্তন (add, update, remove) হলে ট্রিগার হয়।
EntryListener ব্যবহার করে আপনি ইভেন্ট হ্যান্ডলিং করতে পারেন, যেমন:
map
-এ কোনো ডেটা যোগ করা, পরিবর্তন করা বা মুছে ফেলা হলে তাতে রিয়েল-টাইম রেসপন্স পাওয়া।IMap<String, String> map = hazelcastInstance.getMap("myMap");
// EntryListener তৈরি করা
map.addEntryListener(new EntryListener<String, String>() {
@Override
public void entryAdded(EntryEvent<String, String> event) {
System.out.println("New entry added: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
System.out.println("Entry removed: " + event.getKey());
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
System.out.println("Entry updated: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
System.out.println("Entry evicted: " + event.getKey());
}
}, true); // true means the listener is added to all nodes of the cluster
এই উদাহরণে, যখন IMap
-এ কোনো এন্ট্রি যোগ, পরিবর্তন, বা মুছে ফেলা হয়, তখন EntryListener
ট্রিগার হবে এবং সংশ্লিষ্ট ইভেন্ট হ্যান্ডলার কার্যকর হবে।
ItemListener হল একটি ইভেন্ট লিসেনার যা IQueue
বা ISet
এর জন্য ব্যবহৃত হয়। এটি ডেটার add বা remove অপারেশনগুলিতে ট্রিগার হয়।
IQueue<String> queue = hazelcastInstance.getQueue("myQueue");
queue.addItemListener(new ItemListener<String>() {
@Override
public void itemAdded(ItemEvent<String> itemEvent) {
System.out.println("Item added: " + itemEvent.getItem());
}
@Override
public void itemRemoved(ItemEvent<String> itemEvent) {
System.out.println("Item removed: " + itemEvent.getItem());
}
}, true);
এখানে, ItemListener
ব্যবহার করে আপনি একটি কিউতে নতুন আইটেম যুক্ত বা মুছে ফেলার সময় ইভেন্ট শুনতে পারেন।
MapListener হল একটি বিশেষ ধরনের ইভেন্ট লিসেনার যা IMap
ডেটা স্ট্রাকচারের জন্য ব্যবহৃত হয়। এটি IMap
-এর উপর অপারেশন করার সময় নির্দিষ্ট ইভেন্টগুলি শোনে, যেমন নতুন এন্ট্রি যোগ, এন্ট্রি আপডেট, এবং এন্ট্রি মুছে ফেলা।
IMap<String, String> map = hazelcastInstance.getMap("myMap");
map.addMapListener(new MapListener<String, String>() {
@Override
public void mapEvicted(MapEvent mapEvent) {
System.out.println("Map evicted: " + mapEvent.getName());
}
@Override
public void mapCleared(MapEvent mapEvent) {
System.out.println("Map cleared: " + mapEvent.getName());
}
}, true);
এটি আপনাকে IMap
এর উপর সিঙ্ক্রোনাইজড ইভেন্টগুলি ট্র্যাক করতে সাহায্য করে।
ITopic হল Hazelcast-এর একটি ডিস্ট্রিবিউটেড পাবলিশ-সাবস্ক্রাইব সিস্টেম, যা ক্লাস্টারের মধ্যে ইভেন্টগুলো শেয়ার করতে ব্যবহৃত হয়। ITopic
ক্লাসটি পাবলিশ এবং সাবস্ক্রাইব করার জন্য একটি ইন্টারফেস প্রদান করে, যেখানে একজন Publisher ডেটা পাঠায় এবং Subscriber সেই ডেটা গ্রহণ করে।
ITopic<String> topic = hazelcastInstance.getTopic("myTopic");
// Subscriber তৈরি করা
topic.addMessageListener(new MessageListener<String>() {
@Override
public void onMessage(Message<String> message) {
System.out.println("Received message: " + message.getMessageObject());
}
});
// Publisher (Message পাঠানো)
topic.publish("Hello, Hazelcast!");
এখানে, একজন Publisher একটি মেসেজ পাঠান এবং Subscriber সেই মেসেজ গ্রহণ করে। এটি real-time event management এর জন্য একটি ভাল পদ্ধতি।
Hazelcast-এ আপনি ইভেন্টগুলিকে filter করতে পারেন যাতে নির্দিষ্ট ধরনের ডেটা বা পরিবর্তনগুলির জন্য ইভেন্ট শুনতে পারেন।
IMap<String, String> map = hazelcastInstance.getMap("myMap");
map.addEntryListener(new EntryListener<String, String>() {
@Override
public void entryAdded(EntryEvent<String, String> event) {
if ("specificKey".equals(event.getKey())) {
System.out.println("Filtered entry added: " + event.getKey() + " = " + event.getValue());
}
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
// Filter logic for removed entries
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
// Filter logic for updated entries
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
// Filter logic for evicted entries
}
}, false); // False means the listener is added to a single node
এখানে, শুধুমাত্র একটি নির্দিষ্ট কীগুলির জন্য ইভেন্ট ট্র্যাক করা হচ্ছে, যাতে efficient event handling নিশ্চিত করা যায়।
Hazelcast-এ ইভেন্ট লিসেনারগুলি রিয়েল-টাইম ডেটা প্রসেসিংয়ে ব্যবহার করা যেতে পারে। আপনি যদি কোনও ইভেন্টের ভিত্তিতে real-time triggers চালাতে চান, তবে ইভেন্ট লিসেনার ব্যবহার করা একটি কার্যকর উপায় হতে পারে।
উদাহরণস্বরূপ:
IMap
-এ নতুন এন্ট্রি যোগ করা হয়, তখন আপনার অ্যাপ্লিকেশন একটি ক্রিয়া ট্রিগার করতে পারে (যেমন মেইল পাঠানো বা অন্য কোনও সার্ভিসে তথ্য পাঠানো)।Distributed Events Management হল একটি শক্তিশালী ফিচার যা Hazelcast ক্লাস্টারে রিয়েল-টাইম ডেটা পরিবর্তন, events, এবং notifications ম্যানেজ করতে ব্যবহৃত হয়। EntryListener, ItemListener, MapListener, ITopic, এবং Event Filtering এর মতো উপকরণগুলি আপনার ডিস্ট্রিবিউটেড সিস্টেমে কার্যকরী ইভেন্ট ট্র্যাকিং এবং real-time event processing নিশ্চিত করতে সাহায্য করে।
Hazelcast Listeners হল এমন একটি শক্তিশালী ফিচার যা আপনাকে Hazelcast ডেটা স্ট্রাকচারের মধ্যে রিয়েল-টাইম ডেটা প্রসেসিং করতে সহায়ক হয়। লিসেনারগুলি একটি ইভেন্ট-ড্রিভেন আর্কিটেকচারে কাজ করে, যেখানে আপনি ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারে কোনো পরিবর্তন ঘটলে তা জানাতে পারেন এবং সেই অনুযায়ী কাজ করতে পারেন। এর মাধ্যমে Hazelcast সিস্টেমে ডেটার অন্তর্নিহিত পরিবর্তনগুলো দ্রুত সনাক্ত করা এবং সেগুলোর উপর অ্যাকশন গ্রহণ করা সম্ভব হয়।
Hazelcast Listeners ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারে যেমন IMap, IQueue, ISet, IList ইত্যাদিতে পরিবর্তন হলে স্বয়ংক্রিয়ভাবে ট্রিগার হয়, যা রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়।
Hazelcast এ প্রধানত তিন ধরনের Listeners ব্যবহৃত হয়:
EntryListener ব্যবহার করা হয় যখন আপনি IMap এর Key-Value পেয়ারে ডেটার পরিবর্তন সনাক্ত করতে চান। যেমন ডেটা যোগ, পরিবর্তন বা মুছে ফেলা।
EntryListener এক বা একাধিক ইভেন্টে সাড়া দেয়, যেমন:
import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.EntryListener;
import com.hazelcast.map.IMap;
public class MyEntryListener implements EntryListener<String, String> {
@Override
public void entryAdded(EntryEvent<String, String> event) {
System.out.println("Entry added: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
System.out.println("Entry removed: " + event.getKey());
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
System.out.println("Entry updated: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
// Optional: Handle evictions
}
}
// Hazelcast instance তৈরি
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// IMap তৈরি
IMap<String, String> map = hz.getMap("myMap");
// EntryListener যোগ করা
map.addEntryListener(new MyEntryListener(), true); // 'true' means to include existing entries
entryAdded
ট্রিগার হয় যখন একটি নতুন কিজি ভ্যালু পেয়ার IMap এ যুক্ত হয়।entryUpdated
ট্রিগার হয় যখন কোনো কিজি ভ্যালু পেয়ার আপডেট হয়।entryRemoved
ট্রিগার হয় যখন একটি কিজি ভ্যালু পেয়ার IMap থেকে মুছে ফেলা হয়।ItemListener ব্যবহার করা হয় যখন আপনি ISet, IQueue বা IList এ আইটেম যোগ, মুছে ফেলা বা পরিবর্তন হওয়ার ইভেন্টগুলিকে ট্র্যাক করতে চান।
import com.hazelcast.core.ItemEvent;
import com.hazelcast.core.ItemListener;
import com.hazelcast.queue.IQueue;
public class MyItemListener implements ItemListener<String> {
@Override
public void itemAdded(ItemEvent<String> itemEvent) {
System.out.println("Item added: " + itemEvent.getItem());
}
@Override
public void itemRemoved(ItemEvent<String> itemEvent) {
System.out.println("Item removed: " + itemEvent.getItem());
}
}
// Hazelcast instance তৈরি
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// IQueue তৈরি
IQueue<String> queue = hz.getQueue("myQueue");
// ItemListener যোগ করা
queue.addItemListener(new MyItemListener(), true); // 'true' means to include existing items
itemAdded
ট্রিগার হয় যখন একটি নতুন আইটেম IQueue, ISet বা IList এ যোগ করা হয়।itemRemoved
ট্রিগার হয় যখন কোনো আইটেম IQueue, ISet বা IList থেকে মুছে ফেলা হয়।Hazelcast এ MapListener ডিস্ট্রিবিউটেড IMap এর আরও উন্নত ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়। এটি আপনাকে ম্যাপের মধ্যে প্রবাহিত হওয়া কাস্টম ইভেন্টগুলির উপর নজর রাখতে দেয়।
MapListener
বিশেষত আরও কাস্টম ইভেন্ট (যেমন, যখন putAll
, removeAll
, বা অন্যান্য নির্দিষ্ট কার্যকলাপ সম্পন্ন হয়) ট্র্যাক করতে ব্যবহৃত হয়।
ধরা যাক, একটি IMap ব্যবহার করে আমরা ই-কমার্স সাইটে প্রোডাক্টের stock quantity ট্র্যাক করতে চাই। আপনি যদি stock এর সংখ্যা একসাথে বাড়াতে বা কমাতে চান, তবে আপনার অ্যাপ্লিকেশনকে দ্রুত প্রতিক্রিয়া জানাতে হবে। EntryListener ব্যবহার করে আপনি যখনই stock সংখ্যাটি আপডেট করবেন, তখন তা real-time এ পেতে পারবেন।
public class StockEntryListener implements EntryListener<String, Integer> {
@Override
public void entryUpdated(EntryEvent<String, Integer> event) {
String product = event.getKey();
Integer newStock = event.getValue();
System.out.println("Product stock updated: " + product + " new stock: " + newStock);
}
@Override
public void entryAdded(EntryEvent<String, Integer> event) {}
@Override
public void entryRemoved(EntryEvent<String, Integer> event) {}
@Override
public void entryEvicted(EntryEvent<String, Integer> event) {}
}
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<String, Integer> productStock = hz.getMap("productStock");
// EntryListener যোগ করা
productStock.addEntryListener(new StockEntryListener(), true);
// Stock আপডেট করা
productStock.put("Laptop", 20);
এই উদাহরণে, যখনই একটি product stock আপডেট হবে, entryUpdated ইভেন্ট ট্রিগার হবে এবং আপনি তার সাথে সাড়া দিতে পারবেন।
Hazelcast Listeners রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য একটি অত্যন্ত কার্যকর উপকরণ, যা ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারে (IMap, IQueue, ISet, IList) ডেটার পরিবর্তন সনাক্ত করে এবং তা অনুযায়ী অ্যাকশন নিতে সাহায্য করে। EntryListener, ItemListener এবং MapListener এই সকল ডেটা স্ট্রাকচারে কার্যকরভাবে ব্যবহার করা যায় এবং ডেটার পরিবর্তন দ্রুত সনাক্ত করতে সক্ষম হয়, যা real-time ইভেন্ট প্রসেসিংয়ের জন্য অপরিহার্য।
Hazelcast একটি শক্তিশালী ডিস্ট্রিবিউটেড ডেটা গ্রিড প্ল্যাটফর্ম যা events এবং triggers ব্যবহারের মাধ্যমে রিয়েল-টাইম workflow management করতে সক্ষম। এই বৈশিষ্ট্যগুলো আপনাকে ডেটা পরিবর্তনের সাথে সাথে সিস্টেমে স্বয়ংক্রিয় কার্যাবলী প্রক্রিয়া করতে এবং ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনগুলিতে ইভেন্ট-ভিত্তিক প্রক্রিয়াগুলি পরিচালনা করতে সহায়ক।
Hazelcast-এ Events এবং Triggers ব্যবহার করে আপনি সহজেই ডিস্ট্রিবিউটেড সিস্টেমে ইভেন্ট-ড্রিভেন ওয়ার্কফ্লো তৈরি করতে পারেন। এই প্রক্রিয়াগুলি বিভিন্ন অ্যাকশন বা কার্যাবলীর জন্য অটোমেটিক ট্রিগার তৈরি করে, যা ডেটা বা স্টেট পরিবর্তন ঘটলে কার্যকর হয়।
Events হল সিস্টেমের মধ্যে ঘটে যাওয়া গুরুত্বপূর্ণ পরিবর্তনগুলির সূচনা, যা ক্লাস্টারের বিভিন্ন সেবা বা ডেটা স্ট্রাকচারে ঘটতে পারে। Hazelcast বিভিন্ন ধরনের ইভেন্ট প্রদান করে, যা ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে event-driven architecture তৈরি করতে সহায়ক।
Hazelcast-এ সাধারণত নিম্নলিখিত ইভেন্ট টাইপ ব্যবহার করা হয়:
IMap
-এ ঘটে যাওয়া ইভেন্টগুলি (যেমন, put
, remove
, evict
)।ISet
-এ ঘটে যাওয়া ইভেন্টগুলি।IQueue
বা IList
-এ ঘটে যাওয়া ইভেন্টগুলি।IMap
বা IList
এ নতুন এন্ট্রি যুক্ত হওয়া বা মুছে যাওয়া।IMap<String, String> map = hazelcastInstance.getMap("myMap");
// EntryListener তৈরি করুন যা put, remove ইভেন্টগুলির জন্য ট্রিগার হবে
EntryListener<String, String> listener = new EntryListener<String, String>() {
@Override
public void entryAdded(EntryEvent<String, String> event) {
System.out.println("Entry added: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
System.out.println("Entry removed: " + event.getKey());
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
System.out.println("Entry updated: " + event.getKey() + " = " + event.getValue());
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
System.out.println("Entry evicted: " + event.getKey());
}
};
// IMap এ EntryListener রেজিস্টার করা
map.addEntryListener(listener, true);
এই কোড স্নিপেটটি একটি Map
এর উপর EntryListener তৈরি করে, যা put
, remove
, update
, এবং evict
ইভেন্টগুলির জন্য কাজ করবে।
Triggers হল সেই কৌশল যা event-driven কার্যাবলী বা workflow চালানোর জন্য ব্যবহার করা হয়। Hazelcast-এ, ট্রিগার সাধারণত listener-based হয় এবং এটি ডেটা বা স্টেট পরিবর্তনের পর স্বয়ংক্রিয়ভাবে একটি কার্য পরিচালনা করে।
Hazelcast-এ ট্রিগার তৈরি করার জন্য, আপনি EntryProcessor, Listeners, এবং অন্যান্য অটোমেটেড প্রক্রিয়াগুলি ব্যবহার করতে পারেন।
IMap<String, Integer> map = hazelcastInstance.getMap("myMap");
// EntryProcessor ব্যবহার করে ট্রিগার তৈরি করা
EntryProcessor<String, Integer, Integer> processor = new EntryProcessor<String, Integer, Integer>() {
@Override
public Integer process(Map.Entry<String, Integer> entry) {
// কিছু লজিক প্রয়োগ করা (যেমন, মান পরিবর্তন)
entry.setValue(entry.getValue() + 1);
return entry.getValue();
}
};
// EntryProcessor চালানো
map.executeOnKey("key1", processor);
এখানে, EntryProcessor
ব্যবহার করা হয়েছে যা IMap
এর উপর trigger action হিসেবে কাজ করবে। একটি নির্দিষ্ট কী-তে ভ্যালু আপডেট করার জন্য এটি ব্যবহার করা হয়, যা পরবর্তীতে workflow management নিশ্চিত করে।
Hazelcast ব্যবহার করে Events এবং Triggers-এর মাধ্যমে আপনি রিয়েল-টাইম workflow management কার্যকর করতে পারেন। ডিস্ট্রিবিউটেড সিস্টেমে যে কোনো পরিবর্তন বা ইনপুটের ভিত্তিতে, ইভেন্ট ও ট্রিগার অ্যাকশন কার্যকর হবে এবং সিস্টেমের অন্যান্য অংশে তা পৌঁছাবে।
ধরা যাক, আপনি একটি টাস্ক ম্যানেজমেন্ট সিস্টেম তৈরি করছেন, যেখানে কোনো টাস্ক সম্পন্ন হওয়ার পরে একটি ইমেইল পাঠানো হবে। এখানে, Map Event ব্যবহার করে এবং একটি trigger action তৈরি করে এই কাজটি সম্পন্ন করা যাবে।
IMap<String, String> taskMap = hazelcastInstance.getMap("taskMap");
EntryListener<String, String> listener = new EntryListener<String, String>() {
@Override
public void entryAdded(EntryEvent<String, String> event) {
// যদি কোনো টাস্ক সম্পন্ন হয়, তবেই ইমেইল পাঠানোর কাজ হবে
if ("completed".equals(event.getValue())) {
sendEmail("taskCompleted@example.com", "Your task has been completed!");
}
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
// টাস্ক মুছে গেলে কোনো কার্যাবলী হবে না
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
// টাস্ক আপডেট হলে, কিছু কার্য করা হবে
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
// টাস্ক মুছে যাওয়ার পর কার্যাবলী
}
// Helper method to simulate sending an email
private void sendEmail(String to, String message) {
System.out.println("Sending email to " + to + ": " + message);
}
};
// Add EntryListener to taskMap
taskMap.addEntryListener(listener, true);
এখানে, যখন কোনো টাস্ক taskMap
-এ completed
স্ট্যাটাসের সাথে যোগ করা হবে, তখন স্বয়ংক্রিয়ভাবে sendEmail() ফাংশন ট্রিগার হবে এবং একটি ইমেইল পাঠানো হবে।
Hazelcast Events এবং Triggers ব্যবহার করে আপনি একটি অত্যন্ত স্কেলেবল এবং কার্যকরী workflow management সিস্টেম তৈরি করতে পারেন। ডেটার পরিবর্তন ঘটলে স্বয়ংক্রিয়ভাবে ট্রিগার হওয়া কার্যাবলীর মাধ্যমে আপনার সিস্টেমকে আরও স্মার্ট এবং অটোমেটেড করা সম্ভব। Hazelcast এর EntryListeners, EntryProcessors, এবং Events আপনাকে ডিস্ট্রিবিউটেড সিস্টেমে real-time ইভেন্ট-ভিত্তিক কার্যাবলী পরিচালনা করার সুযোগ দেয়।
common.read_more