1. ভূমিকা
স্প্রিং ফ্রেমওয়ার্ক 5.0 কোটলিন ডেভেলপারদের জন্য স্প্রিং ব্যবহার করা সহজ করে তোলে ডেডিকেটেড কোটলিন সমর্থন যোগ করেছে। ফলস্বরূপ, এই পরিবর্তনগুলির অর্থ হল স্প্রিং ক্লাউড জিসিপি দ্বারা প্রদত্ত Google ক্লাউড ইন্টিগ্রেশনগুলিও কোটলিনে নির্বিঘ্নে কাজ করে৷ এই কোডল্যাবে আপনি দেখতে পাবেন যে আপনার কোটলিন অ্যাপ্লিকেশনগুলিতে Google ক্লাউড পরিষেবাগুলি ব্যবহার করা শুরু করা কতটা সহজ!
এই কোডল্যাবটি কোটলিনে একটি সাধারণ রেজিস্ট্রেশন অ্যাপ্লিকেশন সেট আপ করার মাধ্যমে চলে যা GCP পরিষেবাগুলি সহ: Cloud Pub/Sub এবং Cloud SQL ব্যবহার করে দেখায়।
আপনি কি নির্মাণ করবেন
এই কোডল্যাবে, আপনি একটি কোটলিন স্প্রিং বুট অ্যাপ্লিকেশন সেটআপ করবেন যা নিবন্ধিত তথ্য গ্রহণ করে, এটিকে একটি ক্লাউড পাব/সাব বিষয়ে প্রকাশ করে এবং এটি একটি ক্লাউড মাইএসকিউএল ডাটাবেসে বজায় রাখে।
আপনি কি শিখবেন
আপনার কোটলিন স্প্রিং অ্যাপ্লিকেশনে Google ক্লাউড পরিষেবাগুলির সাথে কীভাবে সংহত করবেন৷
আপনি কি প্রয়োজন হবে
- একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
কিভাবে আপনি এই টিউটোরিয়াল ব্যবহার ব্যবহার করবেন?
এইচটিএমএল/সিএসএস ওয়েব অ্যাপ তৈরি করার ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)
প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID
হিসাবে উল্লেখ করা হবে।
- এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷
এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
গুগল ক্লাউড শেল
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .
আপনি যদি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যে আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
3. পাব/সাব রিসোর্সের বিধান
প্রথমে, আমাদের একটি ক্লাউড পাব/সাব বিষয় এবং সদস্যতা সেটআপ করতে হবে। এই অ্যাপ্লিকেশনটিতে, আমরা একটি পাব/সাব বিষয়ে নিবন্ধন তথ্য প্রকাশ করব; তথ্য তারপর এই বিষয় থেকে পড়া হয় এবং একটি ডাটাবেস থেকে অব্যাহত.
এই টিউটোরিয়ালে, আমরা আমাদের সংস্থানগুলি সরবরাহ করতে ক্লাউড শেল-এর উপর নির্ভর করব। মনে রাখবেন যে কেউ Google ক্লাউড কনসোলে ক্লাউড পাব/সাব বিভাগের মাধ্যমে পাব/সাব সংস্থানগুলিও কনফিগার করতে পারে।
আপনার ক্লাউড শেল টার্মিনালে, প্রথমে Pub/Sub API সক্রিয় করুন।
$ gcloud services enable pubsub.googleapis.com
এর পরে, আমরা এই অ্যাপ্লিকেশনটির জন্য registrations
নামে একটি পাব/সাব বিষয় তৈরি করব। আবেদনের মাধ্যমে জমা দেওয়া নিবন্ধন তথ্য এই বিষয়ে প্রকাশ করা হবে।
$ gcloud pubsub topics create registrations
অবশেষে, বিষয়ের জন্য একটি সাবস্ক্রিপশন তৈরি করুন। একটি পাব/সাবস্ক্রিপশন আপনাকে একটি বিষয় থেকে বার্তা পেতে সক্ষম করে।
$ gcloud pubsub subscriptions create registrations-sub --topic=registrations
আপনি এখন আপনার অ্যাপ্লিকেশনের জন্য একটি ক্লাউড পাব/সাব বিষয় এবং সদস্যতা তৈরি করা সম্পূর্ণ করেছেন৷
4. একটি ক্লাউড এসকিউএল (মাইএসকিউএল) ইনস্ট্যান্স এবং ডেটাবেস তৈরি করুন
আমাদের নমুনা অ্যাপ্লিকেশনের জন্য, নিবন্ধক তথ্য ধরে রাখার জন্য আমাদের একটি ডাটাবেস উদাহরণ সেটআপ করতে হবে। এই পদক্ষেপটি ক্লাউড এসকিউএল সংস্থানগুলি সরবরাহ করতে ক্লাউড শেল টার্মিনালের উপরও নির্ভর করবে। মনে রাখবেন যে আপনি Google ক্লাউড কনসোলের মাধ্যমেও আপনার ক্লাউড SQL দৃষ্টান্তগুলি দেখতে এবং কনফিগার করতে পারেন৷
প্রথমে, ক্লাউড এসকিউএল অ্যাডমিন এপিআই সক্ষম করুন।
$ gcloud services enable sqladmin.googleapis.com
এর পরে, আমরা একটি ক্লাউড এসকিউএল (মাইএসকিউএল) উদাহরণ প্রদান করব। এই আদেশে কিছু সময় লাগতে পারে।
$ gcloud sql instances create codelab-instance --region=us-east1
আপনি সফলভাবে আপনার ক্লাউড SQL ইন্সট্যান্স তৈরি করার পরে, আপনার ইনস্ট্যান্সে একটি নতুন ডাটাবেস তৈরি করুন যাকে registrants
বলা হয়।
$ gcloud sql databases create registrants --instance codelab-instance
আপনি এখন আপনার অ্যাপ্লিকেশনের জন্য ক্লাউড এসকিউএল ইনস্ট্যান্স এবং ডাটাবেস সেটআপ সম্পূর্ণ করেছেন।
5. একটি স্প্রিং বুট অ্যাপ্লিকেশন শুরু করুন
আমরা এখন আবেদন লেখা শুরু করতে প্রস্তুত। পরবর্তী ধাপগুলি সেটআপ ধাপে বর্ণিত ক্লাউড শেল ব্যবহার করে চলতে থাকবে।
প্রথমত, আমরা প্রজেক্টের জন্য স্ক্যাফোল্ডিং কোড তৈরি করতে Initializr ব্যবহার করব। আপনার ক্লাউড শেল উইন্ডোতে, চালান:
$ cd ~
$ curl https://start.spring.io/starter.tgz \
-d language=kotlin \
-d bootVersion=2.4.0 \
-d dependencies=web,data-jpa,integration,cloud-gcp-pubsub,thymeleaf \
-d baseDir=registrations-codelab | tar -xzvf -
$ cd registrations-codelab
এই কমান্ডটি registrations-codelab/
ডিরেক্টরিতে আপনার অ্যাপ্লিকেশনের জন্য একটি প্রাথমিক মাভেন প্রকল্প সেটআপের পাশাপাশি স্ক্যাফোল্ডিং কোড তৈরি করে। নিম্নলিখিত বিভাগগুলি একটি কার্যকরী অ্যাপ্লিকেশন তৈরি করার জন্য প্রয়োজনীয় কোড সম্পাদনাগুলি বর্ণনা করে৷
ক্লাউড শেল কোড এডিটর
ক্লাউড শেল পরিবেশে কোড পরিবর্তন এবং দেখা শুরু করার সবচেয়ে সহজ উপায় হল বিল্ট-ইন ক্লাউড শেল কোড এডিটর ব্যবহার করা।
একবার আপনি একটি ক্লাউড শেল ইনস্ট্যান্স খুললে, কোড এডিটর খুলতে পেন্সিল আইকনে ক্লিক করুন। সম্পাদক আপনাকে Initialzr দ্বারা উত্পাদিত প্রকল্প ফাইল সরাসরি পরিবর্তন করার অনুমতি দেওয়া উচিত।
6. ডাটাবেস কনফিগারেশন
প্রথমে, আপনার অ্যাপ্লিকেশন কনফিগার করুন যাতে এটি আপনার সেট আপ করা ক্লাউড মাইএসকিউএল ডাটাবেসের সাথে সংযোগ করতে পারে। স্প্রিং ক্লাউড জিসিপি লাইব্রেরিগুলি একটি ক্লাউড মাইএসকিউএল স্টার্টার অফার করে যা একটি ক্লাউড মাইএসকিউএল ইনস্ট্যান্সের সাথে সংযোগ করার জন্য প্রয়োজনীয় নির্ভরতা প্রদান করে।
প্রকল্প pom.xml-এ spring-cloud-gcp-starter-sql-mysql
নির্ভরতা যোগ করুন:
registrations-codelab/pom.xml
... <dependencies> ... Other dependencies above ... <!-- Add the MySQL starter to the list of dependencies --> <dependency> <groupId>com.google.cloud</groupId> <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId> </dependency> </dependencies>
উপরন্তু, আপনার ডাটাবেস কনফিগারেশন বর্ণনা করার জন্য আপনাকে application.properties
কনফিগারেশন ফাইলটি পরিবর্তন করতে হবে। আপনার application.properties
ফাইলে নিম্নলিখিত বৈশিষ্ট্যগুলি অনুলিপি করুন৷
আপনার ডাটাবেসে উদাহরণ সংযোগের নাম খুঁজুন:
$ gcloud sql instances describe codelab-instance \ --format 'value(connectionName)'
এর আউটপুট সংযোগ তথ্য কনফিগার করতে application.properties
ফাইলে ব্যবহার করা হবে।
src/main/resources/application.properties
# Modify this property using the output from the previous command line. spring.cloud.gcp.sql.instance-connection-name=INSTANCE_CONNECTION_NAME # Your database name spring.cloud.gcp.sql.database-name=registrants # So app starts despite "table already exists" errors. spring.datasource.continue-on-error=true # Enforces database initialization spring.datasource.initialization-mode=always # Cloud SQL (MySQL) only supports InnoDB, not MyISAM spring.jpa.database-platform=org.hibernate.dialect.MySQL55Dialect spring.jpa.hibernate.ddl-auto=create-drop # This is used if you want to connect to a different database instance # user other than root; not used in codelab. # spring.datasource.username=root # This is used to specify the password of the database user; # not used in codelab. # spring.datasource.password=password
একমাত্র সম্পত্তি যা আপনাকে পরিবর্তন করতে হবে তা হল ইনস্ট্যান্স সংযোগের নাম । এই মানটিকে অবশ্যই একটি কোলন-বিচ্ছিন্ন মান হিসাবে ফর্ম্যাট করতে হবে: YOUR_GCP_PROJECT_ID:REGION:DATABASE_INSTANCE_NAME
।
7. স্ট্যাটিক কন্টেন্ট তৈরি করা
প্রথমত, আমরা আমাদের অ্যাপ্লিকেশনের জন্য ফ্রন্টএন্ড তৈরি করব। আবেদনে এমন একটি ফর্ম থাকা উচিত যা কাউকে ব্যক্তি নিবন্ধন করার অনুমতি দেয় এবং একটি দৃশ্য যা সমস্ত সফল নিবন্ধনকারীদের প্রদর্শন করে।
হোম পেজের জন্য, রেজিস্ট্রেশন ফর্ম সম্বলিত একটি index.html
তৈরি করুন।
src/main/resources/static/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Registration Sample Application</title>
</head>
<body>
<h1>Registration</h1>
<div>
<nav>
<a href="/">Home</a><br>
<a href="/registrants">Registered People</a><br>
</nav>
<p>
This is a demo registration application which sends user information to a Pub/Sub topic and
persists it into a MySQL database.
</p>
<h2>Register Person</h2>
<div>
<form action="/registerPerson" method="post">
First Name: <input type="text" name="firstName" />
Last Name: <input type="text" name="lastName" />
Email: <input type="text" name="email" />
<input type="submit" value="Submit"/>
</form>
</div>
</div>
</body>
</html>
এর পরে, আমরা নিবন্ধিত ব্যবহারকারীদের প্রদর্শনের জন্য registrants.html
নামে একটি Thymeleaf টেমপ্লেট তৈরি করব। Thymeleaf হল একটি টেমপ্লেটিং ফ্রেমওয়ার্ক যা আমরা গতিশীলভাবে তৈরি HTML তৈরি এবং পরিবেশন করতে ব্যবহার করি। আপনি দেখতে পাবেন যে টেমপ্লেটটি HTML এর মত দেখাচ্ছে, এটি ব্যতীত এতে গতিশীল সামগ্রী পরিচালনা করার জন্য কিছু অতিরিক্ত মার্কডাউন উপাদান রয়েছে। এই টেমপ্লেটটি personsList
নামক একটি একক প্যারামিটার গ্রহণ করে যাতে আবেদনের মাধ্যমে নিবন্ধিত সকল নিবন্ধনকারী রয়েছে।
src/main/resources/templates/registrants.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Registrants List</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<h1>Registrants List</h1>
<p>
This page displays all the people who were registered through the Pub/Sub topic.
All results are retrieved from the MySQL database.
</p>
<table border="1">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
</tr>
<tr th:each="person : ${personsList}">
<td>[[${person.firstName}]]</td>
<td>[[${person.lastName}]]</td>
<td>[[${person.email}]]</td>
</tr>
</table>
</body>
</html>
এই মুহুর্তে, আপনি যাচাই করতে পারেন যে স্ট্যাটিক কন্টেন্ট পরিবেশন করা হচ্ছে।
Maven ব্যবহার করে অ্যাপটি তৈরি করুন এবং চালান:
$ ./mvnw spring-boot:run
ক্লাউড শেল উইন্ডোতে প্রিভিউ বোতামে ক্লিক করুন এবং নিশ্চিত করুন যে আপনি হোম পেজটি রেন্ডার হচ্ছে দেখেছেন। UI-এর কার্যকারিতাগুলির কোনওটিই কাজ করবে না কারণ আমরা একটি ওয়েব কন্ট্রোলার মিস করছি৷ এটি পরবর্তী ধাপে যোগ করা হবে।
অ্যাপ্লিকেশনটির পূর্বরূপ দেখার পরে, অ্যাপ্লিকেশনটি বন্ধ করতে CTRL+C
টিপুন।
8. একটি পাব/সাব বিষয়ে নিবন্ধনকারীদের পাঠানো
এই ধাপে, আমরা বৈশিষ্ট্যটি বাস্তবায়ন করব যেখানে ওয়েবফর্মের মাধ্যমে জমা দেওয়া নিবন্ধনকারীদের একটি ক্লাউড পাব/সাব বিষয়ে প্রকাশ করা হবে।
ডেটা ক্লাস যোগ করুন
প্রথমত, আমরা কিছু কোটলিন ডেটা ক্লাস তৈরি করব; এগুলি আমাদের জেপিএ সত্তা হবে এবং ফর্মের মাধ্যমে জমা দেওয়া নিবন্ধকদের মধ্যবর্তী প্রতিনিধিত্ব হিসাবেও কাজ করবে৷
ডেমো প্যাকেজে, দুটি নতুন ফাইল যোগ করুন: একটি Person
শ্রেণি এবং একটি স্প্রিং ডেটা PersonRepository
। এই দুটি ক্লাস আমাদেরকে সহজেই স্প্রিং ডেটা JPA ব্যবহার করে আমাদের MySQL ডাটাবেস থেকে রেজিস্ট্রেশন এন্ট্রি সংরক্ষণ এবং পুনরুদ্ধার করতে দেয়।
src/main/kotlin/com/example/demo/Person.kt
package com.example.demo
import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Entity
data class Person(
val firstName: String,
val lastName: String,
val email: String,
@Id @GeneratedValue
var id: Long? = 0)
src/main/kotlin/com/example/demo/PersonRepository.kt
package com.example.demo
import org.springframework.data.repository.CrudRepository
interface PersonRepository : CrudRepository<Person, Long>
ওয়েব কন্ট্রোলার যোগ করুন
এর পরে, আমরা একটি কন্ট্রোলার ক্লাস তৈরি করব যা ফর্ম থেকে নিবন্ধনকারীদের প্রক্রিয়া করে এবং আপনার আগে তৈরি করা ক্লাউড পাব/সাব বিষয়ে তথ্য পাঠায়। এই নিয়ামক দুটি শেষ পয়েন্ট তৈরি করে:
-
/registerPerson
: POST এন্ডপয়েন্ট যেখানে নিবন্ধনকারীর তথ্য জমা দেওয়া হয় এবং তারপর Pub/Sub বিষয়ে পাঠানো হয়।registerPerson(..)
ফাংশনে,PubSubTemplate
ব্যবহার করে Pub/Sub বিষয়ে নিবন্ধনকারীর তথ্য পাঠানো হয়, এটি স্প্রিং ক্লাউড GCP পাব/সাব ইন্টিগ্রেশনের একটি সুবিধার শ্রেণী যা ক্লাউড পাব/সাবের সাথে ইন্টারঅ্যাক্ট শুরু করার জন্য প্রয়োজনীয় বয়লারপ্লেট কোড কমিয়ে দেয়। -
/registrants
: ডাটাবেসে সফলভাবে নিবন্ধিত সকল নিবন্ধনকারীকে প্রদর্শন করে। এই তথ্যটি স্প্রিং ডেটা রিপোজিটরি ব্যবহার করে MySQL ইনস্ট্যান্স থেকে পুনরুদ্ধার করা হয়েছে যা আমরা পূর্ববর্তী ধাপে তৈরি করেছি।
ডেমো প্যাকেজে নিম্নলিখিত কন্ট্রোলার ক্লাস তৈরি করুন:
src/main/kotlin/com/example/demo/Controller.kt
package com.example.demo
import com.google.cloud.spring.pubsub.core.PubSubTemplate
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.servlet.ModelAndView
import org.springframework.web.servlet.view.RedirectView
@RestController
class Controller(val pubSubTemplate: PubSubTemplate, val personRepository: PersonRepository) {
// The Pub/Sub topic name created earlier.
val REGISTRATION_TOPIC = "registrations"
@PostMapping("/registerPerson")
fun registerPerson(
@RequestParam("firstName") firstName: String,
@RequestParam("lastName") lastName: String,
@RequestParam("email") email: String): RedirectView {
pubSubTemplate.publish(
REGISTRATION_TOPIC,
Person(firstName, lastName, email))
return RedirectView("/")
}
@GetMapping("/registrants")
fun getRegistrants(): ModelAndView {
val personsList = personRepository.findAll().toList()
return ModelAndView("registrants", mapOf("personsList" to personsList))
}
}
নিয়ন্ত্রক ওয়েব ফর্মের মাধ্যমে জমা দেওয়া নিবন্ধনকারীর তথ্য পড়ে এবং তারপরে পাব/সাব বিষয়ে তথ্য প্রকাশ করে।
JSON অবজেক্ট ম্যাপার বিন যোগ করা হচ্ছে
আপনি হয়ত কন্ট্রোলারে লক্ষ্য করেছেন যে আমরা পাব/সাব বিষয়ে একটি Person
অবজেক্ট প্রকাশ করি এবং একটি স্ট্রিং নয়। এটি সম্ভব কারণ আমরা বিষয়গুলিতে পাঠানোর জন্য কাস্টম JSON পেলোডগুলির জন্য স্প্রিং ক্লাউড GCP সমর্থনের সুবিধা গ্রহণ করি - লাইব্রেরিগুলি আপনাকে JSON-এ বস্তুগুলিকে সিরিয়ালাইজ করার অনুমতি দেয়, একটি বিষয়ে JSON পেলোড পাঠাতে এবং পেলোড প্রাপ্ত হওয়ার পরে সেটিকে ডিসিরিয়ালাইজ করতে দেয়৷
এই বৈশিষ্ট্যটির সুবিধা নেওয়ার জন্য, আমাদের অবশ্যই আপনার অ্যাপ্লিকেশন প্রসঙ্গে একটি ObjectMapper
বিন যুক্ত করতে হবে। যখন আপনার অ্যাপ্লিকেশন বার্তা পাঠায় এবং গ্রহণ করে তখন এই ObjectMapper
বিনটি JSON-এ এবং থেকে বস্তুগুলিকে সিরিয়ালাইজ করতে ব্যবহার করা হবে। DemoApplication.kt
ক্লাসে, JacksonPubSubMessageConverter
স্প্রিং বিন যোগ করুন:
src/main/kotlin/com/example/demo/DemoApplication.kt
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
// new imports to add
import org.springframework.context.annotation.Bean
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.cloud.spring.pubsub.support.converter.JacksonPubSubMessageConverter
@SpringBootApplication
class DemoApplication {
// This bean enables serialization/deserialization of
// Java objects to JSON for Pub/Sub payloads
@Bean
fun jacksonPubSubMessageConverter(objectMapper: ObjectMapper) =
JacksonPubSubMessageConverter(objectMapper)
}
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
এই মুহুর্তে, আপনি চালানোর মাধ্যমে আবার অ্যাপ্লিকেশন চালানোর চেষ্টা করতে পারেন:
$ ./mvnw spring-boot:run
মূল পৃষ্ঠার ওয়েব ফর্ম থেকে, অ্যাপ্লিকেশনটি এখন আপনার তৈরি করা পাব/সাব বিষয়ে তথ্য পাঠাবে। যাইহোক, এটি এখনও কার্যকর কিছু করছে না কারণ আমাদের এখনও সেই পাব/সাব বিষয় থেকে পড়তে হবে! এটি পরবর্তী ধাপে সম্পন্ন করা হয়।
9. পাব/সাব টপিক থেকে নিবন্ধনকারীদের পড়া
চূড়ান্ত ধাপে, আমরা পাব/সাব বিষয় থেকে নিবন্ধিত তথ্য প্রক্রিয়াকরণ করব এবং ক্লাউড মাইএসকিউএল ডাটাবেসে তথ্য বজায় রাখব। এটি আবেদনটি সম্পূর্ণ করবে, আপনাকে ফর্মের মাধ্যমে নতুন নিবন্ধনকারীদের জমা দিতে এবং /registrants
এন্ডপয়েন্টের মাধ্যমে সমস্ত নিবন্ধিত ব্যবহারকারীদের দেখতে অনুমতি দেবে।
এই অ্যাপ্লিকেশনটি স্প্রিং ইন্টিগ্রেশনের সুবিধা নেবে, যা মেসেজিংয়ের সাথে কাজ করার জন্য অনেক সুবিধাজনক বিমূর্ততা প্রদান করে। আমরা একটি PubSubInboundChannelAdapter
যোগ করব যাতে আমরা Pub/Sub বিষয় থেকে বার্তা পড়তে পারি এবং সেগুলিকে আরও প্রক্রিয়াকরণের জন্য pubsubInputChannel
এ রাখতে পারি। তারপরে আমরা @ServiceActivator
ব্যবহার করে messageReceiver
ফাংশন কনফিগার করব যা pubsubInputChannel
এ আসা বার্তাগুলির সাথে আমন্ত্রণ জানানো হবে।
src/main/kotlin/com/example/demo/DemoApplication.kt
package com.example.demo
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Bean
import com.fasterxml.jackson.databind.ObjectMapper
import org.springframework.cloud.gcp.pubsub.support.converter.JacksonPubSubMessageConverter
// new imports to add
import com.google.cloud.spring.pubsub.core.PubSubTemplate
import com.google.cloud.spring.pubsub.integration.AckMode
import com.google.cloud.spring.pubsub.integration.inbound.PubSubInboundChannelAdapter
import com.google.cloud.spring.pubsub.support.BasicAcknowledgeablePubsubMessage
import com.google.cloud.spring.pubsub.support.GcpPubSubHeaders
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.integration.annotation.ServiceActivator
import org.springframework.integration.channel.DirectChannel
import org.springframework.messaging.MessageChannel
import org.springframework.messaging.handler.annotation.Header
@SpringBootApplication
class DemoApplication {
private val REGISTRANT_SUBSCRIPTION = "registrations-sub"
@Autowired
private lateinit var personRepository: PersonRepository
// New Spring Beans to add
@Bean
fun pubsubInputChannel() = DirectChannel()
@Bean
fun messageChannelAdapter(
@Qualifier("pubsubInputChannel") inputChannel: MessageChannel,
pubSubTemplate: PubSubTemplate): PubSubInboundChannelAdapter {
val adapter = PubSubInboundChannelAdapter(
pubSubTemplate, REGISTRANT_SUBSCRIPTION)
adapter.outputChannel = inputChannel
adapter.ackMode = AckMode.MANUAL
adapter.payloadType = Person::class.java
return adapter
}
@ServiceActivator(inputChannel = "pubsubInputChannel")
fun messageReceiver(
payload: Person,
@Header(GcpPubSubHeaders.ORIGINAL_MESSAGE) message: BasicAcknowledgeablePubsubMessage) {
personRepository.save(payload)
print("Message arrived! Payload: $payload")
message.ack()
}
// ObjectMapper bean from previous step
@Bean
fun jacksonPubSubMessageConverter(objectMapper: ObjectMapper) = JacksonPubSubMessageConverter(objectMapper)
}
fun main(args: Array<String>) {
runApplication<DemoApplication>(*args)
}
এই মুহুর্তে, আপনি অ্যাপ্লিকেশনটির জন্য সেটআপ সম্পন্ন করেছেন। অ্যাপটি সঠিকভাবে কাজ করে তা যাচাই করতে, চালান:
$ ./mvnw spring-boot:run
পূর্বরূপ বোতামে আবার ক্লিক করুন এবং ফর্মটি পূরণ করে এবং জমা দিয়ে একজন ব্যবহারকারীকে নিবন্ধন করার চেষ্টা করুন।
নতুন নিবন্ধনকারী টেবিলে উপস্থিত হয়েছে তা যাচাই করতে নিবন্ধিত ব্যক্তিদের লিঙ্কে ক্লিক করুন৷
অভিনন্দন, আপনি এখন সম্পন্ন! টার্মিনাল উইন্ডোতে CTRL+C
টিপে অ্যাপ্লিকেশনটি বন্ধ করুন।
10. পরিষ্কার করা
আপনার পরিবেশ পরিষ্কার করতে, আপনাকে আপনার তৈরি করা পাব/সাব বিষয় এবং ক্লাউড মাইএসকিউএল উদাহরণ মুছতে হবে।
ক্লাউড মাইএসকিউএল ইনস্ট্যান্স মুছে ফেলা হচ্ছে
$ gcloud sql instances delete codelab-instance
পাব/সাব রিসোর্স মুছে ফেলা হচ্ছে
$ gcloud pubsub subscriptions delete registrations-sub $ gcloud pubsub topics delete registrations
11. অভিনন্দন!
আপনি এখন একটি স্প্রিং কোটলিন অ্যাপ্লিকেশন লেখা সম্পূর্ণ করেছেন যা ক্লাউড পাব/সাব এবং ক্লাউড এসকিউএল (মাইএসকিউএল) এর সাথে একীভূত হয়।
আরও জানুন
- GCP প্রকল্পে বসন্ত: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub সংগ্রহস্থলে বসন্ত: https://github.com/GoogleCloudPlatform/spring-cloud-gcp
- Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
- জিসিপি ব্যবহার করে কোটলিন অ্যাপ্লিকেশনের নমুনা: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/master/spring-cloud-gcp-kotlin-samples
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।