पब / सब हे एक मेसेजिंग सोल्यूशन आहे GCP:

वास्तविक कॉन्फिगरेशनमध्ये प्रवेश करण्यापूर्वी, आपण हे लक्षात घेतले पाहिजे की GCP साठी स्प्रिंग क्लाउड आता व्यवस्थापित केले आहे Google क्लाउड: संघ. म्हणून, शेवटचा कोड सापडतो येथे:.

आमचे अॅप पब / सब कडून संदेश प्राप्त करेल an एंडपॉईंट वापरून ते शोधेल.
प्रथम, आयात वर जाऊया

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gkatzioura</groupId>
    <artifactId>spring-cloud-pubsub-example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>2.0.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>spring-cloud-gcp-pubsub</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>spring-cloud-gcp-autoconfigure</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-core</artifactId>
        </dependency>
    </dependencies>

</project>

द्रुत टीप. आपण काही चिमटा सह PubSub वापरू शकता एमुलेटर Google क्लाउड टीम कडून उपलब्ध.

पहिल्या धड्यात प्राप्त झालेले पब / उप संदेश आहेत. ही मर्यादित संख्येने संदेश असलेली रांग असेल.

package com.gkatzioura.pubsub.example;

import java.util.concurrent.LinkedBlockingQueue;

import org.springframework.stereotype.Component;

@Component
public class LatestUpdates {

    LinkedBlockingQueue<String> boundedQueue = new LinkedBlockingQueue<>(100);

    public void addUpdate(String update) {
        boundedQueue.add(update);
    }

    public String fetch() {
        return boundedQueue.poll();
    }

}

पब / सब कॉन्फिगरेशन श्रोत्यासाठी, तसेच स्प्रिंग इंटिग्रेशनसाठी सुरू होईल.

आम्ही संदेश चॅनेल परिभाषित करतो.

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

नंतर येणारे चॅनेल अडॅप्टर जोडा. Ack मोड मॅन्युअल वर सेट केला जाईल.

@Bean
    public PubSubInboundChannelAdapter messageChannelAdapter(
            @Qualifier("pubsubInputChannel") MessageChannel inputChannel,
            PubSubTemplate pubSubTemplate) {
        PubSubInboundChannelAdapter adapter =
                new PubSubInboundChannelAdapter(pubSubTemplate, "your-subscription");
        adapter.setOutputChannel(inputChannel);
        adapter.setAckMode(AckMode.MANUAL);
        adapter.setPayloadType(String.class);
        return adapter;
    }

मग आम्ही श्रोता पद्धत जोडतो. पावतीवर प्रक्रिया करण्याची पद्धत विकासकावर सोडली आहे. जर त्या ब्लॉकमध्ये अपवाद असेल तर तो पकडला जाईल – एरर स्ट्रीमवर पाठवला जाईल. त्यानंतर, संदेश डाउनलोड करणे सुरू राहील.

@ServiceActivator(inputChannel = "pubsubInputChannel")
    public void messageReceiver(String payload,
                                @Header(GcpPubSubHeaders.ORIGINAL_MESSAGE) BasicAcknowledgeablePubsubMessage message) {
        latestUpdates.addUpdate(message.getPubsubMessage().getData().toStringUtf8());
        message.ack();
    }

पूर्ण पब / उप कॉन्फिगरेशन

package com.gkatzioura.pubsub.example;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.handler.annotation.Header;

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;

@Configuration
public class PubSubConfiguration {

    private final LatestUpdates latestUpdates;

    public PubSubConfiguration(LatestUpdates latestUpdates) {
        this.latestUpdates = latestUpdates;
    }

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

    @Bean
    public PubSubInboundChannelAdapter messageChannelAdapter(
            @Qualifier("pubsubInputChannel") MessageChannel inputChannel,
            PubSubTemplate pubSubTemplate) {
        PubSubInboundChannelAdapter adapter =
                new PubSubInboundChannelAdapter(pubSubTemplate, "your-subscription");
        adapter.setOutputChannel(inputChannel);
        adapter.setAckMode(AckMode.MANUAL);
        adapter.setPayloadType(String.class);
        return adapter;
    }

    @ServiceActivator(inputChannel = "pubsubInputChannel")
    public void messageReceiver(String payload,
                                @Header(GcpPubSubHeaders.ORIGINAL_MESSAGE) BasicAcknowledgeablePubsubMessage message) {
        latestUpdates.addUpdate(message.getPubsubMessage().getData().toStringUtf8());
        message.ack();
    }

}

कंट्रोलर फक्त आतल्या रांगेतून बाहेर येईल.

package com.gkatzioura.pubsub.example;

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

@RestController
public class UpdatesController {

    private LatestUpdates latestUpdates;

    public UpdatesController(LatestUpdates latestUpdates) {
        this.latestUpdates = latestUpdates;
    }

    @GetMapping("/update")
    public String getLatestUpdate() {
        return latestUpdates.fetch();
    }

}

पुढील पायरी म्हणजे वसंत forतूसाठी अर्ज करणे

package com.gkatzioura.pubsub.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ExampleApplication {


    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }

}

प्रोग्राम चालवताना, लक्षात ठेवा की आपल्याकडे किमान एक env व्हेरिएबल असणे आवश्यक आहे

spring.cloud.gcp.pubsub.enabled=true

हे तुमच्या स्थानिक GCP कॉन्फिगरेशनवर परत येईल, तुमची क्रेडेन्शियल्स तसेच ज्या प्रकल्पावर ती सूचीबद्ध आहे ते प्रकट करा.

समाप्त! सारांशित करण्यासाठी, आम्ही पब / सब वरून संदेश काढण्यासाठी पुढे गेलो की त्यांना शेवटच्या बिंदूवर शोधले.