1. ওভারভিউ
স্প্রিং ইন্টিগ্রেশন আপনাকে MessageChannels
মাধ্যমে Messages
আদান-প্রদানের জন্য একটি মেসেজিং মেকানিজম প্রদান করে। এটি বাহ্যিক সিস্টেমের সাথে যোগাযোগ করতে চ্যানেল অ্যাডাপ্টার ব্যবহার করে।
এই অনুশীলনে, আমরা দুটি অ্যাপ তৈরি করব যা স্প্রিং ক্লাউড জিসিপি দ্বারা প্রদত্ত স্প্রিং ইন্টিগ্রেশন চ্যানেল অ্যাডাপ্টার ব্যবহার করে যোগাযোগ করে। এই অ্যাডাপ্টারগুলি স্প্রিং ইন্টিগ্রেশনকে বার্তা বিনিময় ব্যাকএন্ড হিসাবে Google ক্লাউড পাব/সাব ব্যবহার করে।
আপনি ক্লাউড শেল এবং ক্লাউড SDK gcloud কমান্ড কীভাবে ব্যবহার করবেন তা শিখবেন।
এই টিউটোরিয়ালটি স্প্রিং বুট শুরু করার নির্দেশিকা থেকে নমুনা কোড ব্যবহার করে।
আপনি কি শিখবেন
- স্প্রিং ইন্টিগ্রেশন এবং স্প্রিং ক্লাউড জিসিপি ব্যবহার করে Google ক্লাউড পাব/সাব-এর মাধ্যমে অ্যাপগুলির মধ্যে বার্তাগুলি কীভাবে বিনিময় করবেন
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটর যেমন Vim, EMACs বা Nano এর সাথে পরিচিতি
কিভাবে আপনি এই টিউটোরিয়াল ব্যবহার ব্যবহার করবেন?
এইচটিএমএল/সিএসএস ওয়েব অ্যাপ তৈরি করার ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
গুগল ক্লাউড শেল
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .
যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
3. পাব/সাব রিসোর্সের বিধান
Google ক্লাউড পাব/সাব বিষয় পৃষ্ঠাতে নেভিগেট করুন।
টপিক তৈরি করুন ক্লিক করুন।
টপিকের নাম হিসেবে exampleTopic
টাইপ করুন এবং তারপর Create এ ক্লিক করুন।
টপিক তৈরি হওয়ার পর টপিক পেজে থাকুন। আপনি এইমাত্র যে বিষয়টি তৈরি করেছেন তা সন্ধান করুন, লাইনের শেষে তিনটি উল্লম্ব বিন্দু টিপুন এবং নতুন সদস্যতা ক্লিক করুন।
সাবস্ক্রিপশন নামের পাঠ্য বাক্সে exampleSubscription
টাইপ করুন এবং তৈরি করুন ক্লিক করুন।
4. স্প্রিং বুট অ্যাপ্লিকেশন শুরু করুন
ক্লাউড শেল চালু হওয়ার পরে, আপনি স্প্রিং ইনিশিয়ালাইজারের সাথে দুটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন তৈরি করতে কমান্ড লাইন ব্যবহার করতে পারেন:
$ 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 -
5. বার্তা পাঠাতে একটি অ্যাপ্লিকেশন তৈরি করুন৷
এখন আমাদের মেসেজ পাঠানোর অ্যাপ তৈরি করা যাক। পাঠানো অ্যাপের ডিরেক্টরিতে পরিবর্তন করুন।
$ cd spring-integration-sender
আমরা আমাদের অ্যাপটি একটি চ্যানেলে বার্তা লিখতে চাই। চ্যানেলে একটি বার্তা আসার পরে, এটি আউটবাউন্ড চ্যানেল অ্যাডাপ্টারের দ্বারা নেওয়া হবে, যা এটিকে একটি সাধারণ স্প্রিং বার্তা থেকে একটি Google ক্লাউড পাব/সাব বার্তায় রূপান্তরিত করে এবং এটিকে একটি Google ক্লাউড পাব/সাব বিষয়ে প্রকাশ করে৷
আমাদের অ্যাপটি একটি চ্যানেলে লেখার জন্য, আমরা একটি স্প্রিং ইন্টিগ্রেশন মেসেজিং গেটওয়ে ব্যবহার করতে পারি। 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 অনুরোধগুলি শুনছে, তবে এটিকে একটি REST কন্ট্রোলার হিসাবে চিহ্নিত করতে DemoApplication
ক্লাসে একটি @RestController
টীকা যোগ না করেও নয়৷
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 এবং endpoint /postMessage
এ একটি বার্তা সম্বলিত POST অনুরোধগুলি শুনছে, কিন্তু আমরা এটি পরে পাব৷
6. বার্তা পাওয়ার জন্য একটি অ্যাপ্লিকেশন তৈরি করুন
আমরা এইমাত্র একটি অ্যাপ তৈরি করেছি যা Google Cloud Pub/Sub-এর মাধ্যমে বার্তা পাঠায়। এখন, আমরা অন্য একটি অ্যাপ তৈরি করব যা সেই বার্তাগুলি গ্রহণ করে এবং সেগুলিকে প্রক্রিয়া করে৷
একটি নতুন ক্লাউড শেল সেশন খুলতে + ক্লিক করুন।
তারপরে, নতুন ক্লাউড শেল সেশনে, রিসিভার অ্যাপের ডিরেক্টরিতে ডিরেক্টরি পরিবর্তন করুন:
$ 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();
}
}
Google Cloud Pub/Sub থেকে বার্তা পেতে এবং 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!
7. পরিষ্কার করা
এই অনুশীলনের অংশ হিসাবে তৈরি করা সদস্যতা এবং বিষয় মুছুন।
$ gcloud pubsub subscriptions delete exampleSubscription
$ gcloud pubsub topics delete exampleTopic
8. সারাংশ
আপনি দুটি স্প্রিং বুট অ্যাপ সেট আপ করেছেন যা Google ক্লাউড পাব/সাবের জন্য স্প্রিং ইন্টিগ্রেশন চ্যানেল অ্যাডাপ্টার ব্যবহার করে। তারা Google Cloud Pub/Sub API-এর সাথে কখনও ইন্টারঅ্যাক্ট না করে নিজেদের মধ্যে বার্তা বিনিময় করে।
9. অভিনন্দন!
আপনি Google ক্লাউড পাব/সাবের জন্য স্প্রিং ইন্টিগ্রেশন চ্যানেল অ্যাডাপ্টারগুলি কীভাবে ব্যবহার করবেন তা শিখেছেন!
আরও জানুন
- Google Cloud Pub/Sub: https://cloud.google.com/pubsub/
- GCP প্রকল্পে বসন্ত: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub সংগ্রহস্থলে বসন্ত: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।