Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.beam.sdk.io.aws.sqs; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.Message; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; import org.apache.beam.sdk.coders.Coder; import org.apache.beam.sdk.coders.SerializableCoder; import org.apache.beam.sdk.io.UnboundedSource; import org.apache.beam.sdk.io.aws.sqs.SqsIO.Read; import org.apache.beam.sdk.options.PipelineOptions; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Supplier; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Suppliers; class SqsUnboundedSource extends UnboundedSource<Message, SqsCheckpointMark> { private final Read read; private final SqsConfiguration sqsConfiguration; private final Supplier<AmazonSQS> sqs; public SqsUnboundedSource(Read read, SqsConfiguration sqsConfiguration) { this.read = read; this.sqsConfiguration = sqsConfiguration; sqs = Suppliers.memoize((Supplier<AmazonSQS> & Serializable) () -> AmazonSQSClientBuilder.standard() .withClientConfiguration(sqsConfiguration.getClientConfiguration()) .withCredentials(sqsConfiguration.getAwsCredentialsProvider()) .withRegion(sqsConfiguration.getAwsRegion()).build()); } @Override public List<SqsUnboundedSource> split(int desiredNumSplits, PipelineOptions options) { List<SqsUnboundedSource> sources = new ArrayList<>(); for (int i = 0; i < Math.max(1, desiredNumSplits); ++i) { sources.add(new SqsUnboundedSource(read, sqsConfiguration)); } return sources; } @Override public UnboundedReader<Message> createReader(PipelineOptions options, @Nullable SqsCheckpointMark checkpointMark) { return new SqsUnboundedReader(this, checkpointMark); } @Override public Coder<SqsCheckpointMark> getCheckpointMarkCoder() { return SerializableCoder.of(SqsCheckpointMark.class); } @Override public Coder<Message> getOutputCoder() { return SerializableCoder.of(Message.class); } public Read getRead() { return read; } public AmazonSQS getSqs() { return sqs.get(); } @Override public boolean requiresDeduping() { return true; } }