Search in sources :

Example 1 with Subscription

use of com.google.pubsub.v1.Subscription in project beam by apache.

the class PubsubGrpcClient method pull.

@Override
public List<IncomingMessage> pull(long requestTimeMsSinceEpoch, SubscriptionPath subscription, int batchSize, boolean returnImmediately) throws IOException {
    PullRequest request = PullRequest.newBuilder().setSubscription(subscription.getPath()).setReturnImmediately(returnImmediately).setMaxMessages(batchSize).build();
    PullResponse response = subscriberStub().pull(request);
    if (response.getReceivedMessagesCount() == 0) {
        return ImmutableList.of();
    }
    List<IncomingMessage> incomingMessages = new ArrayList<>(response.getReceivedMessagesCount());
    for (ReceivedMessage message : response.getReceivedMessagesList()) {
        PubsubMessage pubsubMessage = message.getMessage();
        @Nullable Map<String, String> attributes = pubsubMessage.getAttributes();
        // Payload.
        byte[] elementBytes = pubsubMessage.getData().toByteArray();
        // Timestamp.
        String pubsubTimestampString = null;
        Timestamp timestampProto = pubsubMessage.getPublishTime();
        if (timestampProto != null) {
            pubsubTimestampString = String.valueOf(timestampProto.getSeconds() + timestampProto.getNanos() / 1000L);
        }
        long timestampMsSinceEpoch = extractTimestamp(timestampAttribute, pubsubTimestampString, attributes);
        // Ack id.
        String ackId = message.getAckId();
        checkState(!Strings.isNullOrEmpty(ackId));
        // Record id, if any.
        @Nullable String recordId = null;
        if (idAttribute != null && attributes != null) {
            recordId = attributes.get(idAttribute);
        }
        if (Strings.isNullOrEmpty(recordId)) {
            // Fall back to the Pubsub provided message id.
            recordId = pubsubMessage.getMessageId();
        }
        incomingMessages.add(new IncomingMessage(elementBytes, attributes, timestampMsSinceEpoch, requestTimeMsSinceEpoch, ackId, recordId));
    }
    return incomingMessages;
}
Also used : PullRequest(com.google.pubsub.v1.PullRequest) ArrayList(java.util.ArrayList) ByteString(com.google.protobuf.ByteString) ReceivedMessage(com.google.pubsub.v1.ReceivedMessage) Timestamp(com.google.protobuf.Timestamp) PubsubMessage(com.google.pubsub.v1.PubsubMessage) PullResponse(com.google.pubsub.v1.PullResponse) Nullable(javax.annotation.Nullable)

Example 2 with Subscription

use of com.google.pubsub.v1.Subscription in project beam by apache.

the class PubsubGrpcClient method deleteSubscription.

@Override
public void deleteSubscription(SubscriptionPath subscription) throws IOException {
    DeleteSubscriptionRequest request = DeleteSubscriptionRequest.newBuilder().setSubscription(subscription.getPath()).build();
    // ignore Empty result.
    subscriberStub().deleteSubscription(request);
}
Also used : DeleteSubscriptionRequest(com.google.pubsub.v1.DeleteSubscriptionRequest)

Example 3 with Subscription

use of com.google.pubsub.v1.Subscription in project beam by apache.

the class PubsubGrpcClient method createSubscription.

@Override
public void createSubscription(TopicPath topic, SubscriptionPath subscription, int ackDeadlineSeconds) throws IOException {
    Subscription request = Subscription.newBuilder().setTopic(topic.getPath()).setName(subscription.getPath()).setAckDeadlineSeconds(ackDeadlineSeconds).build();
    // ignore Subscription result.
    subscriberStub().createSubscription(request);
}
Also used : Subscription(com.google.pubsub.v1.Subscription)

Example 4 with Subscription

use of com.google.pubsub.v1.Subscription in project beam by apache.

the class PubsubGrpcClient method modifyAckDeadline.

@Override
public void modifyAckDeadline(SubscriptionPath subscription, List<String> ackIds, int deadlineSeconds) throws IOException {
    ModifyAckDeadlineRequest request = ModifyAckDeadlineRequest.newBuilder().setSubscription(subscription.getPath()).addAllAckIds(ackIds).setAckDeadlineSeconds(deadlineSeconds).build();
    // ignore Empty result.
    subscriberStub().modifyAckDeadline(request);
}
Also used : ModifyAckDeadlineRequest(com.google.pubsub.v1.ModifyAckDeadlineRequest)

Example 5 with Subscription

use of com.google.pubsub.v1.Subscription in project beam by apache.

the class PubsubGrpcClientTest method pullOneMessage.

@Test
public void pullOneMessage() throws IOException {
    String expectedSubscription = SUBSCRIPTION.getPath();
    final PullRequest expectedRequest = PullRequest.newBuilder().setSubscription(expectedSubscription).setReturnImmediately(true).setMaxMessages(10).build();
    Timestamp timestamp = Timestamp.newBuilder().setSeconds(PUB_TIME / 1000).setNanos((int) (PUB_TIME % 1000) * 1000).build();
    PubsubMessage expectedPubsubMessage = PubsubMessage.newBuilder().setMessageId(MESSAGE_ID).setData(ByteString.copyFrom(DATA.getBytes())).setPublishTime(timestamp).putAllAttributes(ATTRIBUTES).putAllAttributes(ImmutableMap.of(TIMESTAMP_ATTRIBUTE, String.valueOf(MESSAGE_TIME), ID_ATTRIBUTE, RECORD_ID)).build();
    ReceivedMessage expectedReceivedMessage = ReceivedMessage.newBuilder().setMessage(expectedPubsubMessage).setAckId(ACK_ID).build();
    final PullResponse response = PullResponse.newBuilder().addAllReceivedMessages(ImmutableList.of(expectedReceivedMessage)).build();
    final List<PullRequest> requestsReceived = new ArrayList<>();
    SubscriberImplBase subscriberImplBase = new SubscriberImplBase() {

        @Override
        public void pull(PullRequest request, StreamObserver<PullResponse> responseObserver) {
            requestsReceived.add(request);
            responseObserver.onNext(response);
            responseObserver.onCompleted();
        }
    };
    Server server = InProcessServerBuilder.forName(channelName).addService(subscriberImplBase).build().start();
    try {
        List<IncomingMessage> acutalMessages = client.pull(REQ_TIME, SUBSCRIPTION, 10, true);
        assertEquals(1, acutalMessages.size());
        IncomingMessage actualMessage = acutalMessages.get(0);
        assertEquals(ACK_ID, actualMessage.ackId);
        assertEquals(DATA, new String(actualMessage.elementBytes));
        assertEquals(RECORD_ID, actualMessage.recordId);
        assertEquals(REQ_TIME, actualMessage.requestTimeMsSinceEpoch);
        assertEquals(MESSAGE_TIME, actualMessage.timestampMsSinceEpoch);
        assertEquals(expectedRequest, Iterables.getOnlyElement(requestsReceived));
    } finally {
        server.shutdownNow();
    }
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) SubscriberImplBase(com.google.pubsub.v1.SubscriberGrpc.SubscriberImplBase) Server(io.grpc.Server) PullRequest(com.google.pubsub.v1.PullRequest) ArrayList(java.util.ArrayList) ByteString(com.google.protobuf.ByteString) ReceivedMessage(com.google.pubsub.v1.ReceivedMessage) Timestamp(com.google.protobuf.Timestamp) PubsubMessage(com.google.pubsub.v1.PubsubMessage) PullResponse(com.google.pubsub.v1.PullResponse) IncomingMessage(org.apache.beam.sdk.io.gcp.pubsub.PubsubClient.IncomingMessage) Test(org.junit.Test)

Aggregations

SubscriptionName (com.google.pubsub.v1.SubscriptionName)31 Test (org.junit.Test)26 Subscription (com.google.pubsub.v1.Subscription)14 ByteString (com.google.protobuf.ByteString)11 SubscriptionAdminClient (com.google.cloud.pubsub.spi.v1.SubscriptionAdminClient)10 GeneratedMessageV3 (com.google.protobuf.GeneratedMessageV3)10 TopicName (com.google.pubsub.v1.TopicName)10 StatusRuntimeException (io.grpc.StatusRuntimeException)9 ApiException (com.google.api.gax.grpc.ApiException)8 ArrayList (java.util.ArrayList)8 PushConfig (com.google.pubsub.v1.PushConfig)6 PubsubMessage (com.google.pubsub.v1.PubsubMessage)5 Empty (com.google.protobuf.Empty)4 PullResponse (com.google.pubsub.v1.PullResponse)4 AckReplyConsumer (com.google.cloud.pubsub.spi.v1.AckReplyConsumer)3 MessageReceiver (com.google.cloud.pubsub.spi.v1.MessageReceiver)3 ListSubscriptionsPagedResponse (com.google.cloud.pubsub.spi.v1.PagedResponseWrappers.ListSubscriptionsPagedResponse)3 Subscriber (com.google.cloud.pubsub.spi.v1.Subscriber)3 TopicAdminClient (com.google.cloud.pubsub.spi.v1.TopicAdminClient)3 AcknowledgeRequest (com.google.pubsub.v1.AcknowledgeRequest)3