Java Technologies Spring Cloud Bus (Centralized Eventing) গাইড ও নোট

364

Spring Cloud Bus হল একটি মেসেজ পাসিং সিস্টেম যা মাইক্রোসার্ভিস আর্কিটেকচারে ইভেন্ট শেয়ারিং বা মেসেজ ব্রডকাস্টিং করতে ব্যবহৃত হয়। এটি Centralized Eventing সিস্টেম হিসেবে কাজ করে, যেখানে বিভিন্ন সার্ভিসের মধ্যে ইভেন্ট বা পরিবর্তনগুলি প্রচার করা যায়। Spring Cloud Bus ব্যবহার করে, আপনি এক বা একাধিক সার্ভিসে একটি পরিবর্তন বা ইভেন্ট ঘটানোর সাথে সাথে সেই পরিবর্তন সমস্ত সিস্টেমে স্বয়ংক্রিয়ভাবে ছড়িয়ে দিতে পারেন।

Spring Cloud Bus প্রধানত RabbitMQ বা Kafka এর মতো মেসেজ ব্রোকার ব্যবহার করে মেসেজ এবং ইভেন্টগুলিকে এক সার্ভিস থেকে অন্য সার্ভিসে পাঠায়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে ডিস্ট্রিবিউটেড সিস্টেম এবং সিঙ্ক্রোনাইজড কনফিগারেশন পরিচালনা করার জন্য খুবই উপকারী।


Spring Cloud Bus এর প্রধান বৈশিষ্ট্য

  1. Centralized Eventing:
    Spring Cloud Bus বিভিন্ন মাইক্রোসার্ভিসের মধ্যে সেন্ট্রালাইজড ইভেন্ট প্রচার করে। যখন কোনো সার্ভিসে কনফিগারেশন বা স্টেট পরিবর্তন হয়, তখন সেই পরিবর্তন সিস্টেমের অন্য অংশগুলিতে পৌঁছায়। উদাহরণস্বরূপ, আপনি যদি কনফিগারেশন পরিবর্তন করেন, তা অন্য সার্ভিসগুলোতে শেয়ার হবে।
  2. ডিস্ট্রিবিউটেড সিস্টেমে ইভেন্ট সিঙ্ক্রোনাইজেশন:
    এটি ডিস্ট্রিবিউটেড সিস্টেমে ইভেন্ট সিঙ্ক্রোনাইজেশন করে, যার মাধ্যমে সমস্ত মাইক্রোসার্ভিস একই সময় একে অপরের সাথে সিঙ্ক্রোনাইজড থাকে এবং সহজে পরিবর্তনগুলি সবার কাছে পৌঁছায়।
  3. মেসেজ ব্রডকাস্টিং:
    Spring Cloud Bus মেসেজ ব্রডকাস্ট করতে সক্ষম, যা এক সার্ভিসে সংঘটিত ইভেন্ট বা পরিবর্তন সরাসরি অন্যান্য সার্ভিসগুলোতে পাঠানোর কাজ করে।
  4. ডাইনামিক কনফিগারেশন:
    এটি Spring Cloud Config এবং Spring Cloud Bus এর মধ্যে একত্রিত হয়ে কনফিগারেশন পরিবর্তনগুলো সিস্টেমের বিভিন্ন অংশে স্বয়ংক্রিয়ভাবে বিতরণ করতে সহায়ক।
  5. ফলব্যাক এবং ফেইলওভার:
    মেসেজ প্রেরণ প্রক্রিয়ায় ফেইলওভার এবং ফলব্যাক সমর্থন করে, যার ফলে যদি একটি সার্ভিস বা মেসেজ ব্রোকার ব্যর্থ হয়, তবে সিস্টেম অটোমেটিক্যালি পুনরুদ্ধার করতে সক্ষম হয়।

Spring Cloud Bus কনফিগারেশন

Spring Cloud Bus ব্যবহারের জন্য আপনাকে প্রথমে কিছু ডিপেন্ডেন্সি এবং কনফিগারেশন সেট করতে হবে। Spring Cloud Bus সাধারণত RabbitMQ বা Kafka এর মতো মেসেজ ব্রোকারের মাধ্যমে কাজ করে, তবে আপনি নিজের পছন্দমত অন্য মেসেজ ব্রোকারও ব্যবহার করতে পারেন।

1. Spring Cloud Bus Dependencies

Spring Cloud Bus এর জন্য RabbitMQ বা Kafka ব্যবহারের জন্য নিম্নলিখিত ডিপেন্ডেন্সি যুক্ত করতে হবে:

RabbitMQ ডিপেন্ডেন্সি
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
Kafka ডিপেন্ডেন্সি
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>

2. Spring Cloud Bus কনফিগারেশন

application.properties বা application.yml ফাইল কনফিগারেশন সেট করা হয়, যেখানে মেসেজ ব্রোকারের URL এবং অন্যান্য সেটিংস দেওয়া থাকে।

RabbitMQ Configuration
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.cloud.bus.enabled=true
Kafka Configuration
spring.kafka.bootstrap-servers=localhost:9092
spring.cloud.bus.enabled=true

3. Event Publishing

Spring Cloud Bus-এর মাধ্যমে আপনি ইভেন্ট পাস বা পুশ করতে পারেন। সাধারণত, Spring Cloud Bus অন্যান্য মাইক্রোসার্ভিসকে নির্দিষ্ট ইভেন্ট পাঠানোর জন্য ব্যবহার হয়, যেমন কনফিগারেশন আপডেট বা কোনও বিশেষ অপারেশন সম্পন্ন হওয়া।

Event Publisher Example (Spring Boot)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.cloud.bus.event.RefreshRemoteApplicationEvent;
import org.springframework.messaging.MessageChannel;
import org.springframework.stereotype.Service;

@Service
public class BusPublisherService {

    @Autowired
    private MessageChannel output;

    public void publishEvent() {
        // Creating a custom event to publish
        RemoteApplicationEvent event = new RefreshRemoteApplicationEvent(this, "source", "destination");
        output.send(MessageBuilder.withPayload(event).build());
    }
}

এখানে RemoteApplicationEvent ব্যবহার করা হয়েছে, যা Spring Cloud Bus এর মাধ্যমে এক সার্ভিস থেকে অন্য সার্ভিসে একটি ইভেন্ট প্রেরণ করতে সহায়ক।

4. Event Listener (Spring Boot)

Spring Cloud Bus-এর মাধ্যমে পাঠানো ইভেন্টগুলো অন্য সার্ভিসে গ্রহণ করার জন্য Event Listener তৈরি করা হয়।

import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class BusEventListener {

    @EventListener
    public void handleBusEvent(RemoteApplicationEvent event) {
        // Handle the event (for example, refresh the configuration)
        System.out.println("Received event: " + event.toString());
    }
}

5. Config Changes Propagation

Spring Cloud Bus সাধারণত Spring Cloud Config Server এর সাথে ব্যবহৃত হয়। যখন Config Server-এ কনফিগারেশন পরিবর্তন করা হয়, তখন Spring Cloud Bus সেই পরিবর্তনগুলি অন্যান্য সার্ভিসে পাঠানোর জন্য ব্যবহার করা হয়।

Config Server-এ কনফিগারেশন পরিবর্তন পাঠানো
curl -X POST http://localhost:8888/actuator/bus-refresh

এটি সমস্ত সার্ভিসকে কনফিগারেশন আপডেট পাঠাতে সক্ষম হবে।


Spring Cloud Bus এর সুবিধা

  1. Centralized Eventing:
    Spring Cloud Bus বিভিন্ন সার্ভিসের মধ্যে ইভেন্ট বা কনফিগারেশন পরিবর্তনগুলো দ্রুত এবং কার্যকরভাবে প্রচার করতে সক্ষম।
  2. ডিস্ট্রিবিউটেড সিস্টেমে সিঙ্ক্রোনাইজেশন:
    সিস্টেমের মধ্যে সিঙ্ক্রোনাইজড কনফিগারেশন এবং ইভেন্ট প্রক্রিয়া সহজ করে তোলে।
  3. মেসেজ ব্রডকাস্টিং:
    ইভেন্ট ব্রডকাস্ট করে সার্ভিসগুলোর মধ্যে একে অপরকে দ্রুত আপডেট করা যায়।
  4. ফলব্যাক এবং ফেইলওভার:
    মেসেজ প্রেরণের সময় ফেইলওভার সাপোর্টের মাধ্যমে সিস্টেমের স্থিতিশীলতা বজায় থাকে।
  5. স্ট্রিমলাইন কনফিগারেশন ম্যানেজমেন্ট:
    কনফিগারেশন পরিবর্তনগুলোকে পুরো সিস্টেমে সেন্ট্রালাইজডভাবে পরিচালনা করা যায়।

উপসংহার

Spring Cloud Bus ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে Centralized Eventing এবং ইভেন্ট ব্রডকাস্টিং করতে ব্যবহৃত একটি শক্তিশালী টুল। এটি মাইক্রোসার্ভিসে কনফিগারেশন এবং অন্যান্য ইভেন্টগুলিকে দ্রুত সিস্টেমের মধ্যে প্রসারিত করতে সহায়ক। Spring Cloud Bus এর মাধ্যমে সিস্টেমের বিভিন্ন অংশের মধ্যে ইভেন্ট সিঙ্ক্রোনাইজ করা যায়, যা সিস্টেমের কার্যকারিতা এবং পারফরম্যান্স বাড়াতে সাহায্য করে।

Content added By

Spring Cloud Bus কি এবং কেন এটি ব্যবহার করা হয়?

247

Spring Cloud Bus কি?

Spring Cloud Bus একটি Spring Cloud এর উপাদান যা সিস্টেমে বিভিন্ন মাইক্রোসার্ভিসের মধ্যে বার্তা যোগাযোগ সহজ করে তোলে। এটি মূলত ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে স্টেট বা কনফিগারেশন পরিবর্তনগুলিকে প্রসারিত বা "প্রেরণ" করতে ব্যবহৃত হয়। Spring Cloud Bus ইভেন্ট ড্রিভেন আর্কিটেকচার (event-driven architecture) ব্যবহার করে এবং সাধারণত কনফিগারেশন চেঞ্জ বা অন্যান্য অ্যাপ্লিকেশন ইভেন্টগুলিকে একাধিক সার্ভিসে সিঙ্ক্রোনাইজ করার জন্য ব্যবহৃত হয়।

এটি একটি মেসেজ ব্রোকার, যেমন RabbitMQ বা Kafka এর সাথে ইন্টিগ্রেটেড হয়ে কাজ করে, যা একাধিক মাইক্রোসার্ভিসকে একে অপরের সাথে যোগাযোগ করার সুযোগ দেয়। Spring Cloud Bus এর মাধ্যমে বিভিন্ন সার্ভিসগুলির মধ্যে মেসেজ পাঠানো হয়, যা সিস্টেমের ভেতর তথ্য পরিবর্তন বা ইভেন্ট হ্যান্ডলিং সিস্টেমকে সহজ করে তোলে।

Spring Cloud Bus কেন ব্যবহার করা হয়?

Spring Cloud Bus মূলত বিভিন্ন মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলির মধ্যে সিঙ্ক্রোনাইজেশন এবং কমিউনিকেশন সুবিধা দিতে ব্যবহৃত হয়। এটি ব্যবহারের বেশ কিছু সুবিধা এবং প্রয়োগ ক্ষেত্র রয়েছে, যেমন:

১. কনফিগারেশন পরিবর্তন প্রচার (Configuration Changes Propagation)

একটি মাইক্রোসার্ভিসে কনফিগারেশন পরিবর্তন হলে, সেই পরিবর্তনগুলি অন্য মাইক্রোসার্ভিসগুলোতে দ্রুত আপডেট বা প্রেরণ করতে Spring Cloud Bus ব্যবহৃত হয়। উদাহরণস্বরূপ, যদি আপনি কনফিগারেশন সার্ভিসে কোনো কনফিগারেশন চেঞ্জ করেন, Spring Cloud Bus তা স্বয়ংক্রিয়ভাবে অন্য সার্ভিসে প্রয়োগ করবে। এতে প্রতিটি সার্ভিসের কনফিগারেশন ম্যানেজমেন্ট অনেক সহজ হয়ে যায়।

২. ডিস্ট্রিবিউটেড সিস্টেমের ইভেন্টস (Event Handling in Distributed Systems)

Spring Cloud Bus মাইক্রোসার্ভিস অ্যাপ্লিকেশনগুলিতে ইভেন্ট ড্রিভেন আর্কিটেকচার সুবিধা প্রদান করে। এক সার্ভিসে কিছু ইভেন্ট ঘটলে, সেই ইভেন্টটি অন্য সার্ভিসে স্বয়ংক্রিয়ভাবে পাঠানো হয়। উদাহরণস্বরূপ, একটি মাইক্রোসার্ভিসে নতুন ডাটা তৈরি হলে, তা অন্য সার্ভিসে টেমপ্লেট হিসেবে প্রকাশিত হতে পারে।

৩. হেলথ চেক এবং স্টেট চেঞ্জ (Health Check and State Change Propagation)

ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের মধ্যে সিস্টেম হেলথ বা স্টেট চেঞ্জের জন্য Spring Cloud Bus ব্যবহার করা যেতে পারে। যেমন, এক সার্ভিস যদি ব্যর্থ হয়, তার স্থিতি পরিবর্তন অন্য সার্ভিসে স্বয়ংক্রিয়ভাবে পাঠানো হবে। এতে সিস্টেমের স্থিতি বজায় রাখতে সহজ হয় এবং ত্রুটির বিষয়ে দ্রুত সতর্কতা দেওয়া যায়।

৪. স্কেলিং (Scaling)

একটি সার্ভিসের জন্য যখন নতুন ইনস্ট্যান্স তৈরি করা হয়, তখন Spring Cloud Bus সেটি দ্রুত অন্যান্য সার্ভিসে প্রেরণ করে, যাতে নতুন সার্ভিসগুলি সিস্টেমের মধ্যে সঠিকভাবে সংযুক্ত হতে পারে। এতে মাইক্রোসার্ভিসের স্কেলিং আরও সহজ হয়।

৫. কমিউনিকেশন সিমপ্লিফিকেশন (Simplified Communication)

Spring Cloud Bus একাধিক মাইক্রোসার্ভিসের মধ্যে মেসেজিং এবং কমিউনিকেশন প্রক্রিয়া সহজ করে তোলে। বিভিন্ন সার্ভিসের মধ্যে সোজা যোগাযোগ ব্যবস্থার মাধ্যমে ডেটা প্রেরণ এবং ইভেন্ট পাবলিশিং সহজভাবে করা যায়।

৬. ডাইনামিক কনফিগারেশন আপডেট (Dynamic Configuration Updates)

Spring Cloud Bus কনফিগারেশন চেঞ্জ বা অন্যান্য ইভেন্টের জন্য ফ্লেক্সিবিলিটি প্রদান করে। এক সার্ভিসের কনফিগারেশন চেঞ্জ অন্য সার্ভিসে প্রতিফলিত হয়, যার ফলে সার্ভিসের পুনঃস্টার্টের প্রয়োজন পড়বে না। এতে অ্যাপ্লিকেশনের গতিশীল কনফিগারেশন ম্যানেজমেন্ট সম্ভব হয়।

Spring Cloud Bus কনফিগারেশন উদাহরণ

Spring Cloud Bus ব্যবহার করতে হলে প্রথমে আপনাকে কিছু ডিপেনডেন্সি ইনস্টল করতে হবে, এবং তারপর মেসেজ ব্রোকার যেমন RabbitMQ বা Kafka কনফিগার করতে হবে। নিচে একটি উদাহরণ দেয়া হলো:

১. Spring Cloud Bus এবং RabbitMQ ডিপেনডেন্সি

প্রথমে, pom.xml ফাইলে Spring Cloud Bus এবং RabbitMQ এর ডিপেনডেন্সি যোগ করতে হবে:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

২. RabbitMQ কনফিগারেশন

RabbitMQ এর কনফিগারেশন Spring Boot অ্যাপ্লিকেশনে করতে হবে। নিচে এর উদাহরণ:

spring:
  cloud:
    bus:
      enabled: true
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

৩. অ্যাপ্লিকেশন কনফিগারেশন

Spring Cloud Bus ব্যবহারের জন্য আরও কিছু কনফিগারেশন করতে হতে পারে, যেমন অ্যাপ্লিকেশন রিস্টার্ট ইভেন্ট বা কনফিগারেশন আপডেট প্রসেস করার জন্য কিছু বিশেষ কাজ করতে হবে।

@Configuration
@EnableBinding(Sink.class)
public class EventBusConfig {

    @StreamListener(Sink.INPUT)
    public void handleMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

৪. কনফিগারেশন চেঞ্জ প্রেরণ

Spring Cloud Bus এর মাধ্যমে কনফিগারেশন চেঞ্জ পাঠাতে আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

@Autowired
private ApplicationEventPublisher publisher;

public void sendConfigChangeEvent(String configChange) {
    publisher.publishEvent(new EnvironmentChangeEvent(Collections.singleton(configChange)));
}

এটি কনফিগারেশন পরিবর্তন একটি ইভেন্ট হিসেবে প্রেরণ করবে এবং সেই পরিবর্তন Spring Cloud Bus এর মাধ্যমে অন্যান্য সার্ভিসে পাঠানো হবে।

সারাংশ

Spring Cloud Bus একটি অত্যন্ত গুরুত্বপূর্ণ টুল যা মাইক্রোসার্ভিস আর্কিটেকচারেও বিভিন্ন সার্ভিসের মধ্যে যোগাযোগ এবং ডেটার সিঙ্ক্রোনাইজেশন সহজ করে তোলে। এটি কনফিগারেশন পরিবর্তন, ইভেন্ট ড্রিভেন কমিউনিকেশন এবং ডিস্ট্রিবিউটেড সিস্টেমের অন্যান্য কার্যাবলী সমন্বিতভাবে পরিচালনা করতে সাহায্য করে। Spring Cloud Bus এর মাধ্যমে সিস্টেমের স্কেলেবিলিটি, রিয়েল-টাইম কনফিগারেশন এবং ডাইনামিক সিস্টেম পরিচালনা আরও কার্যকরী হয়ে ওঠে।

Content added By

Spring Cloud Bus দিয়ে Event Broadcasting করা

295

Spring Cloud Bus কি?

Spring Cloud Bus হলো একটি স্ট্রিমিং সিস্টেম যা মাইক্রোসার্ভিস অ্যাপ্লিকেশনে ইভেন্ট ব্রডকাস্টিং এবং কনফিগারেশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এটি বিভিন্ন সার্ভিসের মধ্যে বার্তা বা ইভেন্ট শেয়ার করার জন্য ব্যবহৃত হয়, যাতে একটি সার্ভিসের স্টেট পরিবর্তন বা কোনো গুরুত্বপূর্ণ ইভেন্ট অন্যান্য সার্ভিসে দ্রুত পৌঁছাতে পারে।

Spring Cloud Bus সাধারণত অ্যাপ্লিকেশন কনফিগারেশন রিফ্রেশ, সার্ভিসের মধ্যে ইভেন্ট সিঙ্ক্রোনাইজেশন বা বার্তা পাসিং এর জন্য ব্যবহৃত হয়। এটি RabbitMQ, Kafka বা অন্যান্য মেসেজ ব্রোকার ব্যবহার করে ডিস্ট্রিবিউটেড সিস্টেমে ইভেন্ট ব্রডকাস্ট করে।

Spring Cloud Bus এর ব্যবহার

Spring Cloud Bus এর সাহায্যে আপনি বিভিন্ন মাইক্রোসার্ভিসের মধ্যে কনফিগারেশন পরিবর্তন বা ইভেন্ট ব্রডকাস্ট করতে পারেন। উদাহরণস্বরূপ, আপনি যদি কোনো সার্ভিসে কনফিগারেশন পরিবর্তন করেন, তবে অন্য সার্ভিসগুলোতে সেই পরিবর্তনটি অটোমেটিক্যালি রিফ্রেশ হয়ে যাবে। এটি খুবই উপকারী যখন অনেক সার্ভিসের মধ্যে কনফিগারেশন সিঙ্ক্রোনাইজেশন প্রয়োজন।

Spring Cloud Bus সাধারণত Spring Cloud Config এবং Spring Cloud Stream এর সাথে ইন্টিগ্রেটেড হয়ে কাজ করে। এই ইন্টিগ্রেশনটি একটি সার্ভিসে কনফিগারেশন পরিবর্তন হলে তা অটোমেটিক্যালি সমস্ত ক্লায়েন্ট সার্ভিসে পুশ হয়ে যাবে।


Spring Cloud Bus দিয়ে Event Broadcasting কনফিগারেশন

Spring Cloud Bus দিয়ে ইভেন্ট ব্রডকাস্টিং কনফিগার করতে কয়েকটি প্রধান পদক্ষেপ রয়েছে। নিচে এই কনফিগারেশনটি কিভাবে করবেন তা দেখানো হল।

১. Maven Dependency যুক্ত করা

প্রথমে আপনাকে Spring Cloud Bus, Spring Cloud Stream এবং একটি মেসেজ ব্রোকার (যেমন RabbitMQ বা Kafka) এর জন্য ডিপেনডেন্সি যোগ করতে হবে।

Spring Cloud Bus, Spring Cloud Stream এবং RabbitMQ ডিপেনডেন্সি

<dependencies>
    <!-- Spring Cloud Bus -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>

    <!-- Spring Cloud Stream for Messaging -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>

    <!-- Spring Boot Starter Web (if not already included) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- RabbitMQ -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

এখানে spring-cloud-starter-bus-amqp ডিপেনডেন্সি RabbitMQ এর মাধ্যমে মেসেজ ব্রডকাস্টিং সিস্টেম তৈরি করবে এবং spring-cloud-starter-stream-rabbit Spring Cloud Stream কে RabbitMQ এর সাথে ইন্টিগ্রেট করবে।

২. application.properties বা application.yml কনফিগারেশন

এখন application.properties বা application.yml ফাইলে RabbitMQ এর জন্য কনফিগারেশন সেট করতে হবে।

application.properties:

# RabbitMQ কনফিগারেশন
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

# Spring Cloud Bus
spring.cloud.bus.enabled=true

application.yml:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

  cloud:
    bus:
      enabled: true

এখানে, RabbitMQ সার্ভারটি localhost এ চলছে এবং spring.cloud.bus.enabled=true কনফিগারেশন Spring Cloud Bus সক্রিয় করে।

৩. Event Broadcasting (Producer) কনফিগারেশন

একটি সার্ভিস থেকে ইভেন্ট ব্রডকাস্ট করতে হলে, Spring Cloud Bus এর মাধ্যমে একটি @StreamListener বা @SendTo অ্যনোটেশন ব্যবহার করে ইভেন্ট পাবলিশ করতে হবে।

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@EnableBinding(Source.class)  // Source ইনটারফেসে ডিফাইন করা চ্যানেল ব্যবহার করা হবে
public class EventPublisher {

    @Autowired
    private Source source;

    public void publishEvent(String message) {
        source.output().send(MessageBuilder.withPayload(message).build());
    }
}

এখানে, Source চ্যানেল ব্যবহার করে একটি মেসেজ RabbitMQ বা অন্য মেসেজ ব্রোকারে পাঠানো হচ্ছে।

৪. Event Listener (Consumer) কনফিগারেশন

Spring Cloud Bus এ ইভেন্ট শুনতে, আপনি @StreamListener অথবা @EnableBinding ব্যবহার করতে পারেন। একটি কনজিউমার (Consumer) তৈরি করে আপনার অ্যাপ্লিকেশনে ইভেন্ট শোনার জন্য নিচের কোডটি ব্যবহার করুন।

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.stereotype.Service;

@Service
@EnableBinding(org.springframework.cloud.stream.messaging.Sink.class)
public class EventListener {

    @StreamListener("input")
    public void handleMessage(String message) {
        System.out.println("Received event: " + message);
    }
}

এখানে, @StreamListener দিয়ে আপনি RabbitMQ বা অন্য মেসেজ ব্রোকার থেকে ইভেন্ট শুনছেন এবং প্রাপ্ত মেসেজটি কনসোল আউটপুট হিসেবে দেখাচ্ছেন।

৫. Event Trigger (Sending Event)

Event publisher থেকে ইভেন্ট পাঠাতে, আপনি EventPublisher ক্লাসের publishEvent() মেথডটি কল করতে পারেন।

@Autowired
private EventPublisher eventPublisher;

public void triggerEvent() {
    eventPublisher.publishEvent("Hello from Spring Cloud Bus");
}

এটি RabbitMQ বা অন্য মেসেজ ব্রোকারের মাধ্যমে ইভেন্ট পাঠাবে এবং EventListener ক্লাসটি সেই ইভেন্ট গ্রহণ করবে।


৬. RabbitMQ বা মেসেজ ব্রোকার চালু করা

Spring Cloud Bus এর মাধ্যমে ইভেন্ট শেয়ার করার জন্য আপনাকে RabbitMQ সার্ভার চালু রাখতে হবে। আপনি যদি RabbitMQ Docker ব্যবহার করতে চান, তবে নিচের কমান্ডটি ব্যবহার করতে পারেন:

docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management

এটি RabbitMQ সার্ভার চালু করবে এবং আপনি http://localhost:15672 পোর্টে RabbitMQ এর ম্যানেজমেন্ট কনসোল দেখতে পারবেন।


সারাংশ

Spring Cloud Bus একটি শক্তিশালী টুল যা মাইক্রোসার্ভিস আর্কিটেকচারে ইভেন্ট ব্রডকাস্টিং এবং কনফিগারেশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এটি RabbitMQ বা Kafka এর মতো মেসেজ ব্রোকারের মাধ্যমে সার্ভিসের মধ্যে ইভেন্ট বা বার্তা শেয়ার করতে সাহায্য করে। Spring Cloud Bus এর মাধ্যমে আপনি সহজেই সার্ভিসে কনফিগারেশন পরিবর্তন বা অন্যান্য ইভেন্ট ব্রডকাস্ট করতে পারেন, যা অন্যান্য সার্ভিসে অটোমেটিক্যালি রিফ্রেশ বা প্রক্রিয়া করা হয়।

Content added By

RabbitMQ এবং Kafka এর সাথে Bus Integration

301

Spring Cloud Bus হল একটি মেসেজিং প্ল্যাটফর্ম যা বিভিন্ন মাইক্রোসার্ভিসের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। এটি মূলত RabbitMQ এবং Apache Kafka এর মতো মেসেজিং সিস্টেমের সাথে ইন্টিগ্রেট করা যেতে পারে, যা সার্ভিসগুলির মধ্যে মেসেজ বা ইভেন্ট ট্রান্সফার করতে সাহায্য করে। Spring Cloud Bus ব্যবহার করে, আপনি সিস্টেমের মধ্যে কনফিগারেশন পরিবর্তন, ইভেন্ট ডেলিভারি, এবং অন্যান্য সিস্টেম-ওয়াইড সিগন্যালগুলো দ্রুত পাঠাতে পারেন।

Spring Cloud Bus Overview

Spring Cloud Bus সার্ভিসগুলির মধ্যে দ্রুত ইভেন্ট বা কনফিগারেশন পরিবর্তন ছড়িয়ে দেয়। এটি সার্ভিস ডেক্লেয়ারের মাধ্যমে রিয়েল-টাইম পুশ নোটিফিকেশন বা সার্ভিস কনফিগারেশন আপডেট করতে সাহায্য করে। RabbitMQ এবং Kafka এর মতো মেসেজ ব্রোকারের মাধ্যমে আপনি এই Bus এন্ডপয়েন্ট ব্যবহার করে ইভেন্ট পাস করতে পারেন।

RabbitMQ এবং Kafka এর সাথে Spring Cloud Bus Integration

১. Spring Cloud Bus with RabbitMQ Integration

RabbitMQ Spring Cloud Bus-এর জন্য অন্যতম জনপ্রিয় মেসেজিং ব্রোকার, কারণ এটি AMQP (Advanced Message Queuing Protocol) সমর্থন করে এবং বিভিন্ন সার্ভিসের মধ্যে দ্রুত এবং নির্ভরযোগ্য মেসেজ ট্রান্সফার করতে সাহায্য করে।

১.১ RabbitMQ Dependency

আপনার pom.xml ফাইলে Spring Cloud Bus এবং RabbitMQ এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন:

<dependencies>
    <!-- Spring Cloud Bus for RabbitMQ -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    <!-- RabbitMQ dependency -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>
১.২ application.properties Configuration

আপনার application.properties বা application.yml ফাইলে RabbitMQ এর কনফিগারেশন যুক্ত করুন:

spring.application.name=my-service
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.cloud.bus.enabled=true

এখানে:

  • spring.rabbitmq.host: RabbitMQ সার্ভারের হোস্ট
  • spring.rabbitmq.port: RabbitMQ সার্ভারের পোর্ট (ডিফল্ট পোর্ট: 5672)
  • spring.cloud.bus.enabled: এটি Bus সক্রিয় করার জন্য
১.৩ Service Broadcasting

Spring Cloud Bus ব্যবহার করে একটি সার্ভিস কনফিগারেশন পরিবর্তন বা অন্য কোনো ইভেন্ট ছড়িয়ে দিতে পারে। এটি Actuator এর মাধ্যমে করা সম্ভব। একটি সার্ভিস যদি অন্য সার্ভিসে কনফিগারেশন পরিবর্তন পাঠাতে চায়, তাহলে একটি ইভেন্ট পাবলিশ করা হয়:

curl -X POST http://localhost:8080/actuator/bus/refresh

এটি সকল সিস্টেমে কনফিগারেশন পরিবর্তন ছড়িয়ে দেবে।

২. Spring Cloud Bus with Kafka Integration

Kafka একটি উচ্চ পারফরম্যান্স, স্কেলেবল এবং ডিস্ট্রিবিউটেড মেসেজিং সিস্টেম। এটি Spring Cloud Bus এর সাথে ইন্টিগ্রেট করা হলে, আপনি উচ্চ স্কেল এবং দ্রুত ইভেন্ট পুশিং সক্ষম করতে পারেন।

২.১ Kafka Dependency

আপনার pom.xml ফাইলে Spring Cloud Bus এবং Kafka এর জন্য প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন:

<dependencies>
    <!-- Spring Cloud Bus for Kafka -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-kafka</artifactId>
    </dependency>
    <!-- Kafka dependency -->
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>
</dependencies>
২.২ application.properties Configuration

Kafka এর সাথে Spring Cloud Bus কনফিগার করতে আপনার application.properties বা application.yml ফাইলে নিচের কনফিগারেশন যুক্ত করুন:

spring.application.name=my-service
spring.kafka.bootstrap-servers=localhost:9092
spring.cloud.bus.enabled=true

এখানে:

  • spring.kafka.bootstrap-servers: Kafka সার্ভারের URL এবং পোর্ট (ডিফল্ট পোর্ট: 9092)
  • spring.cloud.bus.enabled: এটি Bus সক্রিয় করার জন্য
২.৩ Service Broadcasting with Kafka

Kafka-এর মাধ্যমে ইভেন্ট ছড়িয়ে দেওয়া Spring Cloud Bus এর জন্য একইভাবে কাজ করবে। উদাহরণস্বরূপ, কনফিগারেশন পরিবর্তন বা অন্য কোন ইভেন্ট Kafka টপিকে পাঠানোর জন্য:

curl -X POST http://localhost:8080/actuator/bus/refresh

এটি সমস্ত সার্ভিসে কনফিগারেশন পরিবর্তন ছড়িয়ে দেবে।

৩. Spring Cloud Bus এর সাথে কনফিগারেশন রিফ্রেশ করা

Spring Cloud Config সার্ভিসের সাথে একত্রে Bus ব্যবহার করলে, আপনি কনফিগারেশন পরিবর্তন করার পর তা সমস্ত সার্ভিসে ছড়িয়ে দিতে পারেন। Spring Cloud Bus ব্যবহার করে কনফিগারেশন রিফ্রেশ করতে নিম্নলিখিত এন্ডপয়েন্ট ব্যবহার করা হয়:

curl -X POST http://localhost:8080/actuator/bus/refresh

এই কমান্ডটি Refresh Event পাঠাবে, এবং যেসব সার্ভিস Spring Cloud Config থেকে কনফিগারেশন গ্রহণ করছে, তারা তাদের কনফিগারেশন পুনরায় লোড করবে। Spring Cloud Bus RabbitMQ বা Kafka এর মাধ্যমে এই ইভেন্টটি সমস্ত সার্ভিসে ছড়িয়ে দেয়।

উপসংহার

Spring Cloud Bus RabbitMQ এবং Kafka এর মতো মেসেজিং প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করার মাধ্যমে মাইক্রোসার্ভিস আর্কিটেকচারে দ্রুত এবং নির্ভরযোগ্য ইভেন্ট ডেলিভারি এবং কনফিগারেশন আপডেট সিস্টেম তৈরি করতে সাহায্য করে। RabbitMQ এবং Kafka ব্যবহারে আপনি উচ্চ স্কেল এবং পারফরম্যান্স সহ ইভেন্ট এবং মেসেজিং সিস্টেম তৈরি করতে সক্ষম হন, যা সার্ভিসের মধ্যে দ্রুত এবং নির্ভরযোগ্য যোগাযোগ নিশ্চিত করে।

Content added By

উদাহরণ সহ Spring Cloud Bus এর ব্যবহার

295

Spring Cloud Bus হল একটি টুল যা মাইক্রোসার্ভিস আর্কিটেকচারে ডিস্ট্রিবিউটেড সিস্টেমের মধ্যে মেসেজ ব্রডকাস্ট এবং ইভেন্ট স্ট্রিমিংয়ের সুবিধা প্রদান করে। এটি সাধারণত কনফিগারেশন পরিবর্তন বা সার্ভিসের মধ্যে ইভেন্ট ট্রিগার করার জন্য ব্যবহৃত হয়।

Spring Cloud Bus ব্যবহার করে আপনি একটি সার্ভিস থেকে অন্য সার্ভিসে লক্ষণীয় (notification) বা ইভেন্ট পাঠাতে পারেন। এটি RabbitMQ বা Kafka এর মাধ্যমে মেসেজ পাঠায় এবং সার্ভিসগুলির মধ্যে দ্রুত পরিবর্তন সিঙ্ক্রোনাইজ করতে সাহায্য করে।


Spring Cloud Bus এর প্রধান বৈশিষ্ট্য

  1. Event Bus:
    • সার্ভিসের মধ্যে ইভেন্ট ট্রান্সমিশন সহজতর করে।
  2. Configuration Changes:
    • Spring Cloud Config এর মাধ্যমে কনফিগারেশন পরিবর্তন সবার মধ্যে প্রচার করা যায়। যখন কনফিগারেশন পরিবর্তিত হয়, Bus তা স্বয়ংক্রিয়ভাবে অন্যান্য সার্ভিসে প্রচার করে।
  3. Real-time Notifications:
    • সার্ভিসের মধ্যে কোন পরিবর্তন হলে বা কোনো ইভেন্ট ঘটলে তা অন্য সার্ভিসগুলোকে দ্রুত জানানো যায়।
  4. Decoupled Communication:
    • মেসেজিং সিস্টেম (যেমন Kafka বা RabbitMQ) ব্যবহার করে সার্ভিসগুলির মধ্যে যোগাযোগ করা হয়, যার ফলে বিভিন্ন সার্ভিস একে অপর থেকে স্বাধীনভাবে কাজ করতে পারে।

Spring Cloud Bus ব্যবহার করার উদাহরণ

এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে RabbitMQ ব্যবহার করা হয়েছে Spring Cloud Bus-এর সাথে। আমরা দেখব কিভাবে একটি সার্ভিস কনফিগারেশন পরিবর্তনের সঙ্গে সাথে অন্যান্য সার্ভিসকে তা জানাতে পারে।

Step 1: RabbitMQ ডিপ্লয়মেন্ট

Spring Cloud Bus RabbitMQ বা Kafka ব্যবহার করে মেসেজ ব্রডকাস্ট করে, তাই প্রথমেই আপনাকে RabbitMQ ইনস্টল করতে হবে। আপনি Docker ব্যবহার করে RabbitMQ চালু করতে পারেন:

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

RabbitMQ UI তে প্রবেশ করতে আপনি http://localhost:15672 এ গিয়ে লগইন করতে পারেন (ডিফল্ট ইউজারনেম এবং পাসওয়ার্ড: guest/guest)।


Step 2: Spring Cloud Bus সেটআপ

  1. pom.xml-এ ডিপেনডেন্সি যোগ করা

    Spring Cloud Bus ব্যবহার করার জন্য নিচের ডিপেনডেন্সি গুলি pom.xml ফাইলে যোগ করতে হবে:

    <dependencies>
        <!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <!-- Spring Cloud Bus with RabbitMQ -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    
        <!-- Spring Cloud Config Client (Optional) -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
    </dependencies>
    
  2. application.properties কনফিগারেশন

    Spring Cloud Bus RabbitMQ ব্যবহার করতে application.properties ফাইলে নিম্নলিখিত কনফিগারেশন যোগ করুন:

    # RabbitMQ connection configuration
    spring.rabbitmq.host=localhost
    spring.rabbitmq.port=5672
    
    # Spring Cloud Bus configuration
    spring.application.name=my-service
    spring.cloud.bus.enabled=true
    
    • spring.rabbitmq.host এবং spring.rabbitmq.port দ্বারা RabbitMQ সার্ভারের অবস্থান উল্লেখ করা হয়।
    • spring.cloud.bus.enabled=true দ্বারা Spring Cloud Bus সক্রিয় করা হয়।
  3. @RefreshScope অ্যানোটেশন

    Spring Cloud Config এর মাধ্যমে কনফিগারেশন পরিবর্তন করতে, @RefreshScope অ্যানোটেশন ব্যবহার করা হয়। এটি কনফিগারেশন পরিবর্তনের সময় Bean গুলিকে রিফ্রেশ করে।

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope
    public class MyController {
    
        @Value("${message:Hello, World!}")
        private String message;
    
        @GetMapping("/message")
        public String getMessage() {
            return message;
        }
    }
    

    এখানে, message প্রপার্টি application.properties ফাইল থেকে নেওয়া হয়েছে, এবং Spring Cloud Bus-এর মাধ্যমে কনফিগারেশন পরিবর্তনের পরে এই অ্যাপ্লিকেশনটি নতুন কনফিগারেশন নিয়ে কাজ করবে।


Step 3: Spring Cloud Config Server (Optional)

Spring Cloud Config Server কনফিগারেশন ম্যানেজ করার জন্য ব্যবহৃত হয়। এটি আপনাকে সার্ভিস কনফিগারেশন সেন্ট্রালি ম্যানেজ করতে সহায়ক হয়। নিচে Config Server এর উদাহরণ দেয়া হল:

  1. Config Server সেটআপ:

    pom.xml ফাইলে Spring Cloud Config Server ডিপেনডেন্সি যোগ করুন:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    
  2. application.properties ফাইলে কনফিগারেশন যোগ করা:

    spring.cloud.config.server.git.uri=https://github.com/your-config-repository
    spring.cloud.config.server.git.clone-on-start=true
    

Step 4: কনফিগারেশন পরিবর্তন এবং ব্রডকাস্ট

Spring Cloud Bus কনফিগারেশন পরিবর্তন বা অন্যান্য ইভেন্ট ব্রডকাস্ট করার জন্য ব্যবহৃত হয়। একবার যদি কনফিগারেশন পরিবর্তন হয়, তাহলে Bus এই পরিবর্তনগুলো সকল ক্লায়েন্ট সার্ভিসে পাঠাবে।

  1. Actuator Refresh Endpoint

    Spring Cloud Config-এর সাথে ইন্টিগ্রেশন করতে /actuator/refresh এন্ডপয়েন্ট ব্যবহার করা হয়, যা কনফিগারেশন রিফ্রেশ করার জন্য কার্যকর।

    curl -X POST http://localhost:8080/actuator/refresh
    

    এটি কনফিগারেশন রিফ্রেশ করে এবং Spring Cloud Bus অন্যান্য সার্ভিসে কনফিগারেশন পরিবর্তন ব্রডকাস্ট করবে।


Step 5: Spring Cloud Bus ব্যবহার করা

এখন যদি আপনার কনফিগারেশন পরিবর্তন হয়, Spring Cloud Bus এটি RabbitMQ বা Kafka এর মাধ্যমে অন্যান্য সার্ভিসে ব্রডকাস্ট করবে। উদাহরণস্বরূপ:

  • সার্ভিস A কনফিগারেশন পরিবর্তন হলে, সার্ভিস B এবং C তা স্বয়ংক্রিয়ভাবে গ্রহণ করবে।
  • আপনি @RefreshScope ব্যবহার করে সার্ভিস B এবং C তে কনফিগারেশন রিফ্রেশ করতে পারবেন।

উপসংহার

Spring Cloud Bus মাইক্রোসার্ভিস আর্কিটেকচারে দ্রুত কনফিগারেশন পরিবর্তন এবং ইভেন্ট ব্রডকাস্ট করার জন্য একটি শক্তিশালী সমাধান। এটি RabbitMQ বা Kafka ব্যবহার করে সার্ভিসগুলোর মধ্যে মেসেজ বা ইভেন্ট ট্রান্সমিট করতে সক্ষম। সার্ভিসের মধ্যে কনফিগারেশন পরিবর্তন সিঙ্ক্রোনাইজ করতে এবং মাইক্রোসার্ভিস গুলোর মধ্যে দ্রুত পরিবর্তন জানতে Spring Cloud Bus অত্যন্ত কার্যকর।

Content added By
Promotion

Are you sure to start over?

Loading...