इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. खास जानकारी
Spring Integration आपको मैसेज सेवा देता है. इससे आप MessageChannels
के ज़रिए Messages
का लेन-देन कर सकते हैं. यह बाहरी सिस्टम से संपर्क करने के लिए चैनल अडैप्टर का इस्तेमाल करता है.
इस अभ्यास में, हम Spring Cloud GCP के दिए गए स्प्रिंग इंटिग्रेशन चैनल अडैप्टर का इस्तेमाल करके दो ऐप्लिकेशन बनाएंगे. ये अडैप्टर, Google Cloud Pub/Sub का इस्तेमाल मैसेज एक्सचेंज के तौर पर करते हैं.
आप Cloud Shell और Cloud SDK gcloud निर्देश का इस्तेमाल करने का तरीका जानेंगे.
यह ट्यूटोरियल स्प्रिंग बूट शुरू करने की गाइड के सैंपल कोड का इस्तेमाल करता है.
आप क्या #39;जानेंगे
- Spring इंटिग्रेशन और स्प्रिंग क्लाउड GCP का इस्तेमाल करके, Google Cloud Pub/Sub वाले ऐप्लिकेशन के बीच मैसेज की अदला-बदली करने का तरीका
आपको क्या चाहिए
- Google Cloud Platform प्रोजेक्ट
- ब्राउज़र, जैसे कि Chrome या Firefox
- Vim, EMACs या नैनो जैसे मानक Linux टेक्स्ट एडिटर के बारे में जानकारी
आप इस ट्यूटोरियल का इस्तेमाल कैसे करेंगे?
एचटीएमएल/सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप कितनी रेटिंग देंगे?
Google Cloud Platform सेवाओं के इस्तेमाल से जुड़े अपने अनुभव को आप कितनी रेटिंग देंगे?
2. सेट अप और ज़रूरी शर्तें
अपनी सुविधा के हिसाब से एनवायरमेंट सेट अप करना
अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:
प्रोजेक्ट आईडी याद रखें, सभी Google क्लाउड प्रोजेक्ट में दिया गया नाम (ऊपर दिया गया नाम पहले ही लिया जा चुका है और यह आपके लिए काम नहीं करेगा!). इसे बाद में इस कोडलैब (कोड बनाना सीखना) में PROJECT_ID
के तौर पर बताया जाएगा.
इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग को चालू करना होगा.
इस कोडलैब के जवाब में कुछ डॉलर से ज़्यादा खर्च नहीं करना चाहिए. हालांकि, अगर आप संसाधनों का इस्तेमाल करना जारी रखते हैं या उन्हें चलाना बंद कर देते हैं, तो यह ज़्यादा भी हो सकता है.
Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर का मुफ़्त ट्रायल पा सकते हैं.
Google Cloud Shell
हालांकि, Google Cloud को लैपटॉप से भी दूर से काम किया जा सकता है, लेकिन इस कोडलैब में हम Google Cloud Shell का इस्तेमाल करेंगे. यह क्लाउड में चल रहे कमांड लाइन एनवायरमेंट है.
Google Cloud Shell चालू करें
GCP Console पर सबसे ऊपर दाईं ओर मौजूद टूलबार में, Cloud Shell आइकॉन पर क्लिक करें:
इसके बाद, &Cont &Cloud Shell शुरू करें &कोटेशन पर क्लिक करें;:
प्रावधान करने और पर्यावरण से जुड़ने में सिर्फ़ कुछ समय लगना चाहिए:
इस वर्चुअल मशीन में डेवलपमेंट से जुड़े सभी टूल हैं#39. इसमें लगातार 5 जीबी की होम डायरेक्ट्री मिलती है. यह Google Cloud पर चलती है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती जाती है. इस लैब में, हो सकता है कि किसी ब्राउज़र या Chromebook से आपका काम न हो.
Cloud Shell से कनेक्ट होने के बाद, आपको यह दिख जाएगा कि इसकी पुष्टि पहले से ही हो चुकी है और प्रोजेक्ट पहले से ही आपके PROJECT_ID पर सेट है.
पुष्टि करने के लिए, Cloud Shell में यह निर्देश चलाएं:
gcloud auth list
कमांड आउटपुट
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
कमांड आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो आप इस निर्देश से इसे सेट कर सकते हैं:
gcloud config set project <PROJECT_ID>
कमांड आउटपुट
Updated property [core/project].
3. Pub/Sub के प्रावधान
Google Cloud Pub/Sub के विषयों के पेज पर जाएं और एपीआई चालू करें.
विषय बनाएं पर क्लिक करें.
विषय के नाम के रूप में exampleTopic
टाइप करें और फिरबनाएं.
विषय बनने के बाद, विषय वाले पेज पर बने रहें. जो विषय आपने अभी-अभी बनाया है उसे खोजें, लाइन के आखिर में तीन वर्टिकल बिंदुओं वाला बटन दबाएं और नई सदस्यता पर क्लिक करें.
सदस्यता के नाम वाले टेक्स्ट बॉक्स में exampleSubscription
टाइप करें और बनाएं पर क्लिक करें.
4. स्प्रिंग बूट ऐप्लिकेशन की शुरुआत करें
Cloud Shell लॉन्च होने के बाद, आप कमांड लाइन का इस्तेमाल करके Spring Initializer के साथ दो नए Spring बूट ऐप्लिकेशन जनरेट कर सकते हैं:
$ curl https://start.spring.io/starter.tgz \
-d bootVersion=2.0.6.RELEASE \
-d dependencies=web \
-d baseDir=spring-integration-sender | tar -xzvf -
$ curl https://start.spring.io/starter.tgz \
-d bootVersion=2.0.6.RELEASE \
-d baseDir=spring-integration-receiver | tar -xzvf -
5. Messages भेजने के लिए ऐप्लिकेशन बनाएं
आइए, अब हमारा मैसेज भेजने वाला ऐप्लिकेशन बनाएं. भेजने वाले ऐप्लिकेशन की डायरेक्ट्री में बदलें.
$ cd spring-integration-sender
हम चाहते हैं कि हमारा ऐप्लिकेशन किसी चैनल में मैसेज लिखें. चैनल में मैसेज आने के बाद, वह आउटबाउंड चैनल अडैप्टर से पिक अप होता है. यह स्प्रिंग मैसेज को Google Cloud Pub/Sub मैसेज से बदलकर, 'Google क्लाउड 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 Cloud Pub/Sub विषय पर प्रकाशित करने के लिए, आउटबाउंड चैनल अडैप्टर की ज़रूरत होगी.
src/main/java/com/example/demo/DemoApplication.java
...
import org.springframework.cloud.gcp.pubsub.core.PubSubTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.cloud.gcp.pubsub.integration.outbound.PubSubMessageHandler;
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
में किसी भी नए मैसेज पर लागू हो जाता है. ऐसे में, हम 'Google क्लाउड Pub/Sub's exampleTopic
विषय पर मैसेज प्रकाशित करने के लिए, अपने आउटबाउंड चैनल अडैप्टर, PubSubMessageHandler
को कॉल कर रहे हैं.
चैनल अडैप्टर की मदद से, अब हम 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
एनोटेशन की वजह से, अब हमारे पास एंडपॉइंट है, जो एचटीटीपी पोस्ट अनुरोधों को सुन रहा है. हालांकि, इसके लिए DemoApplication
क्लास में @RestController
एनोटेशन जोड़ने की ज़रूरत नहीं है, ताकि उसे REST कंट्रोलर के तौर पर मार्क किया जा सके.
src/main/java/com/example/demo/DemoApplication.java
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
...
}
ऐप्लिकेशन को चलाने के लिए, हमें सिर्फ़ ज़रूरी डिपेंडेंसी जोड़नी होंगी.
pom.xml
<project>
...
<!-- Add Spring Cloud GCP Dependency BOM -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
...
<!-- Add Pub/Sub Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-pubsub</artifactId>
</dependency>
<!-- Add Spring Integration -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
</dependency>
</dependencies>
</project>
भेजने वाले का ऐप्लिकेशन चलाएं.
# Set the Project ID in environmental variable
$ export GOOGLE_CLOUD_PROJECT=`gcloud config list \
--format 'value(core.project)'`
$ ./mvnw spring-boot:run
ऐप्लिकेशन, पोर्ट 8080 और एंडपॉइंट /postMessage
पर एक मैसेज वाले पोस्ट अनुरोधों को सुन रहा है, लेकिन हम बाद में उन्हें देखेंगे.
6. Messages पाने के लिए एक ऐप्लिकेशन बनाएं
हमने अभी-अभी एक ऐप्लिकेशन बनाया है, जो Google Cloud Pub/Sub से मैसेज भेजता है. अब हम एक और ऐप्लिकेशन बनाएंगे, जो इन मैसेज को प्रोसेस करेगा और उन्हें प्रोसेस करेगा.
नया Cloud Shell सेशन खोलने के लिए, + पर क्लिक करें.
इसके बाद, नए Cloud Shell सेशन में, डायरेक्ट्री को रिसीव करने वाले ऐप्लिकेशन और #39; की डायरेक्ट्री में बदलें:
$ 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 org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.gcp.pubsub.core.PubSubTemplate;
import org.springframework.cloud.gcp.pubsub.integration.inbound.PubSubInboundChannelAdapter;
@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
को @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);
}
}
इस मामले में, हम मैसेज को लोड करके लॉग करते हैं.
हमें ज़रूरी डिपेंडेंसी जोड़नी होंगी.
pom.xml
<project>
...
<!-- Add Spring Cloud GCP Dependency BOM -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
...
<!-- Add Pub/Sub Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-pubsub</artifactId>
</dependency>
<!-- Add Spring Integration -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
</dependency>
</dependencies>
</project>
रिसीवर ऐप्लिकेशन चलाएं.
$ ./mvnw spring-boot:run
अब भेजने वाले ऐप्लिकेशन पर भेजे गए मैसेज, पाने वाले ऐप्लिकेशन पर लॉग किए जाएंगे. इसकी जांच करने के लिए, एक नया Cloud Shell सेशन खोलें और भेजने वाले ऐप्लिकेशन के लिए एचटीटीपी पोस्ट का अनुरोध करें.
$ curl --data "message=Hello world!" localhost:8080/postMessage
इसके बाद, पुष्टि करें कि रिसीवर ऐप्लिकेशन ने आपके भेजे हुए मैसेज को लॉग किया है!
INFO: Message arrived! Payload: Hello world!
7. साफ़-सफ़ाई सेवा
इस व्यायाम के हिस्से के रूप में बनाई गई सदस्यता और विषय हटाएं.
$ gcloud beta pubsub subscriptions delete exampleSubscription
$ gcloud beta pubsub topics delete exampleTopic
8. खास जानकारी
आपने दो ऐसे स्प्रिंग बूट ऐप्लिकेशन सेट अप किए हैं जो Google Cloud Pub/Sub के लिए स्प्रिंग इंटिग्रेशन चैनल अडैप्टर का इस्तेमाल करते हैं. वे Google Cloud Pub/Sub एपीआई से इंटरैक्ट किए बिना ही एक-दूसरे से मैसेज भेजते हैं.
9. बधाई हो!
आपने Google Cloud Pub/Sub के लिए स्प्रिंग इंटिग्रेशन चैनल अडैप्टर को इस्तेमाल करने का तरीका सीखा!
ज़्यादा जानें
- Google Cloud Pub/Sub: https://cloud.google.com/pubsub/
- GCP प्रोजेक्ट पर वसंत: http://cloud.spring.io/spring-cloud-gcp/
- GCP GitHub डेटा स्टोर करने की जगह पर वसंत: https://github.com/spring-cloud/spring-cloud-gcp
- Google Cloud Platform पर Java: https://cloud.google.com/java/
लाइसेंस
यह काम, क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत मिला है.