স্প্রিং ইন্টিগ্রেশন এবং Google ক্লাউড পাব/সাবের সাথে মেসেজিং

1. সংক্ষিপ্ত বিবরণ

স্প্রিং ইন্টিগ্রেশন আপনাকে MessageChannels এর মাধ্যমে Messages আদান-প্রদানের জন্য একটি মেসেজিং প্রক্রিয়া প্রদান করে। এটি বহিরাগত সিস্টেমের সাথে যোগাযোগের জন্য চ্যানেল অ্যাডাপ্টার ব্যবহার করে।

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

তুমি ক্লাউড শেল এবং ক্লাউড SDK gcloud কমান্ড কীভাবে ব্যবহার করতে হয় তা শিখবে।

এই টিউটোরিয়ালটি স্প্রিং বুট শুরু করার নির্দেশিকা থেকে নমুনা কোড ব্যবহার করে।

তুমি কি শিখবে

  • স্প্রিং ইন্টিগ্রেশন এবং স্প্রিং ক্লাউড জিসিপি ব্যবহার করে গুগল ক্লাউড পাব/সাব সহ অ্যাপগুলির মধ্যে কীভাবে বার্তা বিনিময় করবেন

তোমার যা লাগবে

  • একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • ভিম, ইএমএসি বা ন্যানোর মতো স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটরগুলির সাথে পরিচিতি।

এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।

HTML/CSS ওয়েব অ্যাপ তৈরির ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

গুগল ক্লাউড প্ল্যাটফর্ম পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

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

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি (সাধারণত PROJECT_ID হিসাবে চিহ্নিত) উল্লেখ করতে হবে। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন, এবং এটি উপলব্ধ কিনা তা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে রিসোর্স বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা প্রকল্পটি মুছে ফেলতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

গুগল ক্লাউড শেল

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png সম্পর্কে .

55efc1aaa7a4d3ad.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

9c92662c6a846a5c.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

9f0e51b578fecce5.png সম্পর্কে

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

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণিত এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. প্রকাশনা/উপ সম্পদের ব্যবস্থা করা

গুগল ক্লাউড পাব/সাব বিষয় পৃষ্ঠায় নেভিগেট করুন।

বিষয় তৈরি করুন ক্লিক করুন।

4c938409dc7169a6.png সম্পর্কে

টপিকের নাম হিসেবে exampleTopic টাইপ করুন এবং তারপর Create .. এ ক্লিক করুন।

e2daeec91537f672.png সম্পর্কে

টপিক তৈরি হওয়ার পর, টপিকস পেজে থাকুন। আপনার তৈরি করা টপিকটি খুঁজুন, লাইনের শেষে তিনটি উল্লম্ব বিন্দুতে টিপুন এবং নতুন সাবস্ক্রিপশনে ক্লিক করুন।

975efa26e5054936.png সম্পর্কে

সাবস্ক্রিপশন নামের টেক্সট বক্সে exampleSubscription টাইপ করুন এবং Create এ ক্লিক করুন।

f7a91d9e1cb48009.png সম্পর্কে

৪. স্প্রিং বুট অ্যাপ্লিকেশন শুরু করুন

ক্লাউড শেল চালু হওয়ার পর, আপনি স্প্রিং ইনিশিয়ালাইজারের সাহায্যে দুটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে কমান্ড লাইন ব্যবহার করতে পারেন:

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web,integration,cloud-gcp-pubsub \
  -d type=maven-project \
  -d baseDir=spring-integration-sender | tar -xzvf -

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web,integration,cloud-gcp-pubsub \
  -d type=maven-project \
  -d baseDir=spring-integration-receiver | tar -xzvf -

৫. বার্তা পাঠানোর জন্য একটি অ্যাপ্লিকেশন তৈরি করুন

এবার আমাদের মেসেজ সেন্ডিং অ্যাপ তৈরি করা যাক। সেন্ডিং অ্যাপের ডিরেক্টরিতে পরিবর্তন করুন।

$ cd spring-integration-sender

আমরা চাই আমাদের অ্যাপটি একটি চ্যানেলে বার্তা লিখুক। চ্যানেলে একটি বার্তা আসার পর, এটি আউটবাউন্ড চ্যানেল অ্যাডাপ্টার দ্বারা গৃহীত হবে, যা এটিকে একটি সাধারণ স্প্রিং বার্তা থেকে একটি Google Cloud Pub/Sub বার্তায় রূপান্তরিত করবে এবং এটি একটি Google Cloud Pub/Sub বিষয়ে প্রকাশ করবে।

আমাদের অ্যাপটি চ্যানেলে লেখার জন্য, আমরা একটি স্প্রিং ইন্টিগ্রেশন মেসেজিং গেটওয়ে ব্যবহার করতে পারি। vim , emacs বা nano থেকে একটি টেক্সট এডিটর ব্যবহার করে, DemoApplication ক্লাসের ভিতরে একটি PubsubOutboundGateway ইন্টারফেস ঘোষণা করতে পারি।

src/main/java/com/example/demo/DemoApplication.java

...
import org.springframework.integration.annotation.MessagingGateway;

@SpringBootApplication
public class DemoApplication {

  ...

  @MessagingGateway(defaultRequestChannel = "pubsubOutputChannel")
  public interface PubsubOutboundGateway {
    void sendToPubsub(String text);
  }
}

এখন আমাদের কাছে একটি চ্যানেলে বার্তা পাঠানোর ব্যবস্থা আছে, কিন্তু চ্যানেলে আসার পর সেই বার্তাগুলি কোথায় যায়?

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

src/main/java/com/example/demo/DemoApplication.java

...
import com.google.cloud.spring.pubsub.core.PubSubTemplate;
import com.google.cloud.spring.pubsub.integration.outbound.PubSubMessageHandler;

import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.MessageHandler;

@SpringBootApplication
public class DemoApplication {

  ...

  @Bean
  @ServiceActivator(inputChannel = "pubsubOutputChannel")
  public MessageHandler messageSender(PubSubTemplate pubsubTemplate) {
    return new PubSubMessageHandler(pubsubTemplate, "exampleTopic");
  }
}

@ServiceActivator অ্যানোটেশনের ফলে এই MessageHandler inputChannel এর যেকোনো নতুন বার্তায় প্রয়োগ করা হয়। এই ক্ষেত্রে, আমরা আমাদের আউটবাউন্ড চ্যানেল অ্যাডাপ্টার, PubSubMessageHandler কে Google Cloud Pub/Sub এর exampleTopic টপিকে বার্তাটি প্রকাশ করার জন্য কল করছি।

চ্যানেল অ্যাডাপ্টারটি স্থাপনের মাধ্যমে, আমরা এখন একটি PubsubOutboundGateway অবজেক্টকে স্বয়ংক্রিয়ভাবে সংযুক্ত করতে পারি এবং এটি ব্যবহার করে একটি চ্যানেলে একটি বার্তা লিখতে পারি।

src/main/java/com/example/demo/DemoApplication.java

...
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.view.RedirectView;

@SpringBootApplication
public class DemoApplication {

  ...

  @Autowired
  private PubsubOutboundGateway messagingGateway;

  @PostMapping("/postMessage")
  public RedirectView postMessage(@RequestParam("message") String message) {
    this.messagingGateway.sendToPubsub(message);
    return new RedirectView("/");
  }
}

@PostMapping অ্যানোটেশনের কারণে, আমাদের এখন একটি এন্ডপয়েন্ট আছে যা HTTP POST অনুরোধগুলি শুনছে, কিন্তু DemoApplication ক্লাসে একটি @RestController অ্যানোটেশন যোগ না করেই এটিকে REST কন্ট্রোলার হিসেবে চিহ্নিত করা হচ্ছে।

src/main/java/com/example/demo/DemoApplication.java

import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
  ...
}

নিশ্চিত করুন যে JAVA_HOME সঠিক সংস্করণে সেট করা আছে।

export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

প্রেরক অ্যাপটি চালান।

# Set the Project ID in environmental variable
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list --format 'value(core.project)'`

$ ./mvnw spring-boot:run

অ্যাপটি পোর্ট 8080 এবং এন্ডপয়েন্ট /postMessage এ একটি বার্তা সম্বলিত POST অনুরোধগুলি শুনছে, তবে আমরা এটি পরে আলোচনা করব।

৬. বার্তা গ্রহণের জন্য একটি অ্যাপ্লিকেশন তৈরি করুন

আমরা সবেমাত্র একটি অ্যাপ তৈরি করেছি যা গুগল ক্লাউড পাব/সাবের মাধ্যমে বার্তা পাঠায়। এখন, আমরা আরেকটি অ্যাপ তৈরি করব যা সেই বার্তাগুলি গ্রহণ করে এবং প্রক্রিয়া করে।

একটি নতুন ক্লাউড শেল সেশন খুলতে + এ ক্লিক করুন।

9799bee5fea95aa6.png সম্পর্কে

তারপর, নতুন ক্লাউড শেল সেশনে, ডিরেক্টরিগুলিকে রিসিভার অ্যাপের ডিরেক্টরিতে পরিবর্তন করুন:

$ cd spring-integration-receiver

আগের অ্যাপে, মেসেজিং গেটওয়ে ঘোষণা আমাদের জন্য আউটবাউন্ড চ্যানেল তৈরি করেছিল। যেহেতু আমরা বার্তা গ্রহণের জন্য কোনও মেসেজিং গেটওয়ে ব্যবহার করি না, তাই আমাদের নিজস্ব MessageChannel ঘোষণা করতে হবে যেখানে আগত বার্তাগুলি আসবে।

src/main/java/com/example/demo/DemoApplication.java

...
import org.springframework.context.annotation.Bean;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;

@SpringBootApplication
public class DemoApplication {

  ...

  @Bean
  public MessageChannel pubsubInputChannel() {
    return new DirectChannel();
  }
}

গুগল ক্লাউড পাব/সাব থেকে বার্তা গ্রহণ করতে এবং pubsubInputChannel এ রিলে করার জন্য আমাদের ইনবাউন্ড চ্যানেল অ্যাডাপ্টারের প্রয়োজন হবে।

src/main/java/com/example/demo/DemoApplication.java

...
import com.google.cloud.spring.pubsub.core.PubSubTemplate;
import com.google.cloud.spring.pubsub.integration.inbound.PubSubInboundChannelAdapter;

import org.springframework.beans.factory.annotation.Qualifier;

@SpringBootApplication
public class DemoApplication {

  ...

  @Bean
  public PubSubInboundChannelAdapter messageChannelAdapter(
      @Qualifier("pubsubInputChannel") MessageChannel inputChannel,
      PubSubTemplate pubSubTemplate) {
    PubSubInboundChannelAdapter adapter =
        new PubSubInboundChannelAdapter(pubSubTemplate, "exampleSubscription");
    adapter.setOutputChannel(inputChannel);

    return adapter;
  }
}

এই অ্যাডাপ্টারটি pubsubInputChannel এর সাথে নিজেকে আবদ্ধ করে এবং Google Cloud Pub/Sub exampleSubscription সাবস্ক্রিপশন থেকে নতুন বার্তা শোনে।

আমাদের একটি চ্যানেল আছে যেখানে আগত বার্তাগুলি পোস্ট করা হয়, কিন্তু সেই বার্তাগুলি দিয়ে কী করবেন?

আসুন আমরা @ServiceActivator দিয়ে এগুলো প্রক্রিয়া করি যা pubsubInputChannel এ নতুন বার্তা আসার সাথে সাথে ট্রিগার হয়। এই ক্ষেত্রে, আমরা কেবল বার্তা পেলোড লগ করব।

src/main/java/com/example/demo/DemoApplication.java

...
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.integration.annotation.ServiceActivator;

@SpringBootApplication
public class DemoApplication {

  ...

  private static final Log LOGGER = LogFactory.getLog(DemoApplication.class);

  @ServiceActivator(inputChannel = "pubsubInputChannel")
  public void messageReceiver(String payload) {
    LOGGER.info("Message arrived! Payload: " + payload);
  }
}

নিশ্চিত করুন যে JAVA_HOME সঠিক সংস্করণে সেট করা আছে।

export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

রিসিভার অ্যাপটি চালান।

$ ./mvnw spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=8081"

এখন আপনি প্রেরক অ্যাপে যে কোনও বার্তা পাঠাবেন তা রিসিভার অ্যাপে লগ করা হবে। এটি পরীক্ষা করার জন্য, একটি নতুন ক্লাউড শেল সেশন খুলুন এবং প্রেরক অ্যাপে একটি HTTP POST অনুরোধ করুন।

$ curl --data "message=Hello world!" localhost:8080/postMessage

তারপর, যাচাই করুন যে রিসিভার অ্যাপটি আপনার পাঠানো বার্তাটি লগ করেছে!

INFO: Message arrived! Payload: Hello world!

৭. পরিষ্কার-পরিচ্ছন্নতা

এই অনুশীলনের অংশ হিসেবে তৈরি করা সাবস্ক্রিপশন এবং বিষয় মুছে ফেলুন।

$ gcloud pubsub subscriptions delete exampleSubscription
$ gcloud pubsub topics delete exampleTopic

8. সারাংশ

আপনি দুটি স্প্রিং বুট অ্যাপ সেট আপ করেন যা গুগল ক্লাউড পাব/সাবের জন্য স্প্রিং ইন্টিগ্রেশন চ্যানেল অ্যাডাপ্টার ব্যবহার করে। তারা গুগল ক্লাউড পাব/সাব এপিআইয়ের সাথে কখনও ইন্টারঅ্যাক্ট না করেই নিজেদের মধ্যে বার্তা বিনিময় করে।

9. অভিনন্দন!

তুমি গুগল ক্লাউড পাব/সাবের জন্য স্প্রিং ইন্টিগ্রেশন চ্যানেল অ্যাডাপ্টার ব্যবহার করতে শিখেছো!

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।