অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি মেসেজ ব্রোকার যা অ্যাসিঙ্ক্রোনাস মেসেজিং এবং ডিস্ট্রিবিউটেড সিস্টেমের জন্য ব্যবহৃত হয়। মেসেজ ট্রান্সফার, ডেটা কনসিস্টেন্সি এবং সিস্টেমের রিলায়েবিলিটি নিশ্চিত করার জন্য Local Transactions এবং Distributed Transactions ব্যবহৃত হয়। এই দুটি ট্রানজেকশন প্রকার অ্যাকটিভএমকিউ-তে মেসেজ প্রক্রিয়া করার সময় মেসেজের ইনটিগ্রিটি এবং রিলায়েবিলিটি নিশ্চিত করতে সাহায্য করে।
Local Transactions হলো এমন একটি ট্রানজেকশন মেকানিজম যা একটি একক অ্যাক্টিভএমকিউ ব্রোকারে এক বা একাধিক মেসেজ প্রক্রিয়া করার সময় ব্যবহৃত হয়। এটি সাধারণত তখন ব্যবহার হয় যখন প্রোডিউসার এবং কনজিউমার একই অ্যাকটিভএমকিউ ব্রোকারের মধ্যে কাজ করে এবং মেসেজগুলি একটি নির্দিষ্ট কিউ বা টপিকের মধ্যে আদান-প্রদান হয়।
অ্যাকটিভএমকিউ-এ একটি লোকার ট্রানজেকশন ব্যবহার করার জন্য সাধারণত JMS
API ব্যবহৃত হয়, যেখানে ট্রানজেকশন শুরু, কমিট এবং রোলব্যাক করা হয়।
import javax.jms.*;
public class LocalTransactionExample {
public void sendMessage(Session session, MessageProducer producer, String messageText) throws JMSException {
// Start local transaction
session.start();
try {
TextMessage message = session.createTextMessage(messageText);
producer.send(message);
// Commit transaction
session.commit();
} catch (JMSException e) {
// Rollback in case of failure
session.rollback();
throw e;
}
}
}
এখানে:
session.start()
ট্রানজেকশন শুরু করে।session.commit()
ট্রানজেকশন সফলভাবে শেষ হওয়ার পর মেসেজ প্রক্রিয়া নিশ্চিত করে।session.rollback()
যদি কোনো সমস্যা ঘটে, তবে পুরো ট্রানজেকশনটি বাতিল করে।Distributed Transactions হলো এমন ট্রানজেকশন যা একাধিক অ্যাকটিভএমকিউ ব্রোকারের মধ্যে মেসেজ প্রক্রিয়া করার জন্য ব্যবহৃত হয়। এটি সাধারণত ডিস্ট্রিবিউটেড সিস্টেমে ব্যবহৃত হয় যেখানে একাধিক ব্রোকার বা সিস্টেমের মধ্যে মেসেজ আদান-প্রদান করা হয়। একাধিক সার্ভিস বা ডাটাবেসে একযোগে ট্রানজেকশন করার সময় সিস্টেমের সমন্বয় এবং কনসিস্টেন্সি রক্ষা করার জন্য ডিস্ট্রিবিউটেড ট্রানজেকশন ব্যবহৃত হয়।
অ্যাকটিভএমকিউ XA ট্রানজেকশন ব্যবহারের জন্য, আপনাকে ট্রানজেকশন ম্যানেজার এবং অ্যাকটিভএমকিউ কনফিগারেশন সেট করতে হবে। এখানে JTA
এবং XATransactionManager
এর মধ্যে যোগাযোগ করা হয়।
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="localhost"
dataDirectory="${activemq.data}">
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
<transactionManager>
<bean class="org.apache.activemq.transaction.XATransactionManager"/>
</transactionManager>
<transportConnectors>
<transportConnector uri="tcp://localhost:61616"/>
</transportConnectors>
</broker>
এখানে:
XATransactionManager
কনফিগার করা হয়েছে, যা XA ট্রানজেকশন পরিচালনার জন্য ব্যবহৃত হয়।import javax.jms.*;
import javax.transaction.UserTransaction;
public class DistributedTransactionExample {
public void sendMessage(Session session, MessageProducer producer, String messageText, UserTransaction userTransaction) throws JMSException {
try {
// Begin the distributed transaction
userTransaction.begin();
TextMessage message = session.createTextMessage(messageText);
producer.send(message);
// Commit the distributed transaction
userTransaction.commit();
} catch (Exception e) {
// Rollback the transaction in case of failure
userTransaction.rollback();
throw e;
}
}
}
এখানে:
userTransaction.begin()
ট্রানজেকশন শুরু করে।userTransaction.commit()
পুরো ট্রানজেকশন সফল হলে কমিট করে।userTransaction.rollback()
কোনো সমস্যা হলে পুরো ট্রানজেকশন রোলব্যাক করা হয়।এই ট্রানজেকশন মডেলগুলি অ্যাকটিভএমকিউ-এর মধ্যে মেসেজ সিস্টেমের কনসিস্টেন্সি এবং রিলায়েবিলিটি নিশ্চিত করে, বিশেষ করে যখন সিস্টেমটি বৃহত এবং ডিস্ট্রিবিউটেড হয়।
common.read_more