org.apache.pulsar.client.api.ConsumerBuilder Java Examples

The following examples show how to use org.apache.pulsar.client.api.ConsumerBuilder. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ExclusiveSubscriptionUnitTest.java    From tutorials with MIT License 5 votes vote down vote up
public static void main(String[] args) throws PulsarClientException {
    PulsarClient client = PulsarClient.builder()
            .serviceUrl(SERVICE_URL)
            .build();

    Producer<byte[]> producer = client.newProducer()
            .topic(TOPIC_NAME)
            .create();

    ConsumerBuilder<byte[]> consumer1 = client.newConsumer()
            .topic(TOPIC_NAME)
            .subscriptionName(SUBSCRIPTION_NAME)
            .subscriptionType(SUBSCRIPTION_TYPE);

    ConsumerBuilder<byte[]> consumer2 = client.newConsumer()
            .topic(TOPIC_NAME)
            .subscriptionName(SUBSCRIPTION_NAME)
            .subscriptionType(SUBSCRIPTION_TYPE);

    IntStream.range(0, 999).forEach(i -> {
        Message<byte[]> msg = MessageBuilder.create()
                .setContent(String.format("message-%d", i).getBytes())
                .build();
        try {
            producer.send(msg);
        } catch (PulsarClientException e) {
            System.out.println(e.getMessage());
        }
    });

    // Consumer 1 can subscribe to the topic
    consumer1.subscribe();

    // Consumer 2 cannot due to the exclusive subscription held by consumer 1
    consumer2.subscribeAsync()
            .handle((consumer, exception) -> {
                System.out.println(exception.getMessage());
                return null;
            });
}
 
Example #2
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> ackTimeoutTickTime(long tickTime, TimeUnit timeUnit) {
    checkArgument(timeUnit.toMillis(tickTime) >= MIN_TICK_TIME_MILLIS,
            "Ack timeout tick time should be greater than " + MIN_TICK_TIME_MILLIS + " ms");
    conf.setTickDurationMillis(timeUnit.toMillis(tickTime));
    return this;
}
 
Example #3
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> topics(List<String> topicNames) {
    checkArgument(topicNames != null && !topicNames.isEmpty(),
            "Passed in topicNames list should not be null or empty.");
    topicNames.stream().forEach(topicName ->
            checkArgument(StringUtils.isNotBlank(topicName), "topicNames cannot have blank topic"));
    conf.getTopicNames().addAll(topicNames.stream().map(StringUtils::trim).collect(Collectors.toList()));
    return this;
}
 
Example #4
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> topic(String... topicNames) {
    checkArgument(topicNames != null && topicNames.length > 0,
            "Passed in topicNames should not be null or empty.");
    Arrays.stream(topicNames).forEach(topicName ->
            checkArgument(StringUtils.isNotBlank(topicName), "topicNames cannot have blank topic"));
    conf.getTopicNames().addAll(Lists.newArrayList(Arrays.stream(topicNames).map(StringUtils::trim)
            .collect(Collectors.toList())));
    return this;
}
 
Example #5
Source File: ExclusiveSubscriptionTutorial.java    From pulsar-java-tutorial with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws PulsarClientException {
    PulsarClient client = PulsarClient.builder()
            .serviceUrl(SERVICE_URL)
            .build();

    Producer<byte[]> producer = client.newProducer()
            .topic(TOPIC_NAME)
            .create();

    ConsumerBuilder<byte[]> consumer1 = client.newConsumer()
            .topic(TOPIC_NAME)
            .subscriptionName(SUBSCRIPTION_NAME)
            .subscriptionType(SUBSCRIPTION_TYPE);

    ConsumerBuilder<byte[]> consumer2 = client.newConsumer()
            .topic(TOPIC_NAME)
            .subscriptionName(SUBSCRIPTION_NAME)
            .subscriptionType(SUBSCRIPTION_TYPE);

    IntStream.range(0, 999).forEach(i -> {
        Message<byte[]> msg = MessageBuilder.create()
                .setContent(String.format("message-%d", i).getBytes())
                .build();
        try {
            producer.send(msg);
        } catch (PulsarClientException e) {
            LOG.error(e.getMessage());
        }
    });

    // Consumer 1 can subscribe to the topic
    consumer1.subscribe();

    // But oops! Consumer 2 cannot due to the exclusive subscription held by consumer 1
    consumer2.subscribeAsync()
            .handle((consumer, exception) -> {
                LOG.error(exception.getMessage());
                return null;
            });
}
 
Example #6
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> property(String key, String value) {
    checkArgument(StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value),
            "property key/value cannot be blank");
    conf.getProperties().put(key, value);
    return this;
}
 
Example #7
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> patternAutoDiscoveryPeriod(int interval, TimeUnit unit) {
    checkArgument(interval >= 0, "interval needs to be >= 0");
    int intervalSeconds = (int) unit.toSeconds(interval);
    conf.setPatternAutoDiscoveryPeriod(intervalSeconds);
    return this;
}
 
Example #8
Source File: PulsarSourceTest.java    From pulsar with Apache License 2.0 5 votes vote down vote up
/**
 * Verify that JavaInstance does not support functions that take Void type as input.
 */
private static PulsarClientImpl getPulsarClient() throws PulsarClientException {
    PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class);
    ConsumerBuilder<?> goodConsumerBuilder = mock(ConsumerBuilder.class);
    ConsumerBuilder<?> badConsumerBuilder = mock(ConsumerBuilder.class);
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).topics(argThat(new TopicMatcher("persistent://sample/ns1/test_result")));
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).topics(argThat(new TopicMatcher("persistent://sample/ns1/test_result1")));
    doReturn(badConsumerBuilder).when(goodConsumerBuilder).topics(argThat(new TopicMatcher("persistent://sample/ns1/test_result2")));
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).topics(argThat(new TopicMatcher("persistent://sample/ns1/test_result3")));
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).cryptoFailureAction(any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).subscriptionName(any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).subscriptionInitialPosition(any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).subscriptionType(any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).ackTimeout(anyLong(), any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).messageListener(any());
    doReturn(goodConsumerBuilder).when(goodConsumerBuilder).properties(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).cryptoFailureAction(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).subscriptionName(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).subscriptionInitialPosition(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).subscriptionType(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).ackTimeout(anyLong(), any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).messageListener(any());
    doReturn(badConsumerBuilder).when(badConsumerBuilder).properties(any());

    Consumer<?> consumer = mock(Consumer.class);
    doReturn(consumer).when(goodConsumerBuilder).subscribe();
    doReturn(goodConsumerBuilder).when(pulsarClient).newConsumer(any());
    doReturn(CompletableFuture.completedFuture(consumer)).when(goodConsumerBuilder).subscribeAsync();
    CompletableFuture<Consumer<?>> badFuture = new CompletableFuture<>();
    badFuture.completeExceptionally(new PulsarClientException("Some Error"));
    doReturn(badFuture).when(badConsumerBuilder).subscribeAsync();
    doThrow(PulsarClientException.class).when(badConsumerBuilder).subscribe();
    doReturn(CompletableFuture.completedFuture(Optional.empty())).when(pulsarClient).getSchema(anyString());
    return pulsarClient;
}
 
Example #9
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 5 votes vote down vote up
@Override
public ConsumerBuilder<T> intercept(ConsumerInterceptor<T>... interceptors) {
    if (interceptorList == null) {
        interceptorList = new ArrayList<>();
    }
    interceptorList.addAll(Arrays.asList(interceptors));
    return this;
}
 
Example #10
Source File: ConsumerHandler.java    From pulsar with Apache License 2.0 5 votes vote down vote up
private ConsumerBuilder<byte[]> getConsumerConfiguration(PulsarClient client) {
    ConsumerBuilder<byte[]> builder = client.newConsumer();

    if (queryParams.containsKey("ackTimeoutMillis")) {
        builder.ackTimeout(Integer.parseInt(queryParams.get("ackTimeoutMillis")), TimeUnit.MILLISECONDS);
    }

    if (queryParams.containsKey("subscriptionType")) {
        checkArgument(Enums.getIfPresent(SubscriptionType.class, queryParams.get("subscriptionType")).isPresent(),
                "Invalid subscriptionType %s", queryParams.get("subscriptionType"));
        builder.subscriptionType(SubscriptionType.valueOf(queryParams.get("subscriptionType")));
    }

    if (queryParams.containsKey("receiverQueueSize")) {
        builder.receiverQueueSize(Math.min(Integer.parseInt(queryParams.get("receiverQueueSize")), 1000));
    }

    if (queryParams.containsKey("consumerName")) {
        builder.consumerName(queryParams.get("consumerName"));
    }

    if (queryParams.containsKey("priorityLevel")) {
        builder.priorityLevel(Integer.parseInt(queryParams.get("priorityLevel")));
    }

    if (queryParams.containsKey("maxRedeliverCount") || queryParams.containsKey("deadLetterTopic")) {
        DeadLetterPolicy.DeadLetterPolicyBuilder dlpBuilder = DeadLetterPolicy.builder();
        if (queryParams.containsKey("maxRedeliverCount")) {
            dlpBuilder.maxRedeliverCount(Integer.parseInt(queryParams.get("maxRedeliverCount")))
                    .deadLetterTopic(String.format("%s-%s-DLQ", topic, subscription));
        }

        if (queryParams.containsKey("deadLetterTopic")) {
            dlpBuilder.deadLetterTopic(queryParams.get("deadLetterTopic"));
        }
        builder.deadLetterPolicy(dlpBuilder.build());
    }

    return builder;
}
 
Example #11
Source File: PulsarConsumerKafkaConfig.java    From pulsar with Apache License 2.0 5 votes vote down vote up
public static ConsumerBuilder<byte[]> getConsumerBuilder(PulsarClient client, Properties properties) {
    ConsumerBuilder<byte[]> consumerBuilder = client.newConsumer();

    if (properties.containsKey(CONSUMER_NAME)) {
        consumerBuilder.consumerName(properties.getProperty(CONSUMER_NAME));
    }

    if (properties.containsKey(RECEIVER_QUEUE_SIZE)) {
        consumerBuilder.receiverQueueSize(Integer.parseInt(properties.getProperty(RECEIVER_QUEUE_SIZE)));
    }

    if (properties.containsKey(TOTAL_RECEIVER_QUEUE_SIZE_ACROSS_PARTITIONS)) {
        consumerBuilder.maxTotalReceiverQueueSizeAcrossPartitions(
                Integer.parseInt(properties.getProperty(TOTAL_RECEIVER_QUEUE_SIZE_ACROSS_PARTITIONS)));
    }

    if (properties.containsKey(ACKNOWLEDGEMENTS_GROUP_TIME_MILLIS)) {
        consumerBuilder.acknowledgmentGroupTime(
                Long.parseLong(properties.getProperty(ACKNOWLEDGEMENTS_GROUP_TIME_MILLIS)), TimeUnit.MILLISECONDS);
    }

    if (properties.containsKey(SUBSCRIPTION_TOPICS_MODE)) {
        RegexSubscriptionMode mode;
        try {
            mode = RegexSubscriptionMode.valueOf(properties.getProperty(SUBSCRIPTION_TOPICS_MODE));
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("Illegal subscription mode, valid values are: "
                + Arrays.asList(RegexSubscriptionMode.values()));
        }
        consumerBuilder.subscriptionTopicsMode(mode);
    }

    return consumerBuilder;
}
 
Example #12
Source File: PulsarConsumerKafkaConfig.java    From pulsar with Apache License 2.0 5 votes vote down vote up
public static ConsumerBuilder<byte[]> getConsumerBuilder(PulsarClient client, Properties properties) {
    ConsumerBuilder<byte[]> consumerBuilder = client.newConsumer();

    if (properties.containsKey(CONSUMER_NAME)) {
        consumerBuilder.consumerName(properties.getProperty(CONSUMER_NAME));
    }

    if (properties.containsKey(RECEIVER_QUEUE_SIZE)) {
        consumerBuilder.receiverQueueSize(Integer.parseInt(properties.getProperty(RECEIVER_QUEUE_SIZE)));
    }

    if (properties.containsKey(TOTAL_RECEIVER_QUEUE_SIZE_ACROSS_PARTITIONS)) {
        consumerBuilder.maxTotalReceiverQueueSizeAcrossPartitions(
                Integer.parseInt(properties.getProperty(TOTAL_RECEIVER_QUEUE_SIZE_ACROSS_PARTITIONS)));
    }

    if (properties.containsKey(ACKNOWLEDGEMENTS_GROUP_TIME_MILLIS)) {
        consumerBuilder.acknowledgmentGroupTime(
                Long.parseLong(properties.getProperty(ACKNOWLEDGEMENTS_GROUP_TIME_MILLIS)), TimeUnit.MILLISECONDS);
    }

    if (properties.containsKey(SUBSCRIPTION_TOPICS_MODE)) {
        RegexSubscriptionMode mode;
        try {
            mode = RegexSubscriptionMode.valueOf(properties.getProperty(SUBSCRIPTION_TOPICS_MODE));
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("Illegal subscription mode, valid values are: "
                + Arrays.asList(RegexSubscriptionMode.values()));
        }
        consumerBuilder.subscriptionTopicsMode(mode);
    }

    return consumerBuilder;
}
 
Example #13
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> autoUpdatePartitions(boolean autoUpdate) {
    conf.setAutoUpdatePartitions(autoUpdate);
    return this;
}
 
Example #14
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override

    public ConsumerBuilder<T> startMessageIdInclusive() {
        conf.setResetIncludeHead(true);
        return this;
    }
 
Example #15
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> subscriptionTopicsMode(@NonNull RegexSubscriptionMode mode) {
    conf.setRegexSubscriptionMode(mode);
    return this;
}
 
Example #16
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> enableRetry(boolean retryEnable) {
    conf.setRetryEnable(retryEnable);
    return this;
}
 
Example #17
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> expireTimeOfIncompleteChunkedMessage(long duration, TimeUnit unit) {
    conf.setExpireTimeOfIncompleteChunkedMessageMillis(unit.toMillis(duration));
    return null;
}
 
Example #18
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> patternAutoDiscoveryPeriod(int periodInMinutes) {
    checkArgument(periodInMinutes >= 0, "periodInMinutes needs to be >= 0");
    patternAutoDiscoveryPeriod(periodInMinutes, TimeUnit.MINUTES);
    return this;
}
 
Example #19
Source File: DefaultSchemasTest.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Test
public void testConsumerInstantiation() {
    ConsumerBuilder<String> stringConsumerBuilder = client.newConsumer(new StringSchema())
            .topic(TEST_TOPIC);
    Assert.assertNotNull(stringConsumerBuilder);
}
 
Example #20
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> acknowledgmentGroupTime(long delay, TimeUnit unit) {
    checkArgument(delay >= 0, "acknowledgmentGroupTime needs to be >= 0");
    conf.setAcknowledgementsGroupTimeMicros(unit.toMicros(delay));
    return this;
}
 
Example #21
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> cryptoFailureAction(@NonNull ConsumerCryptoFailureAction action) {
    conf.setCryptoFailureAction(action);
    return this;
}
 
Example #22
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> negativeAckRedeliveryDelay(long redeliveryDelay, TimeUnit timeUnit) {
    checkArgument(redeliveryDelay >= 0, "redeliveryDelay needs to be >= 0");
    conf.setNegativeAckRedeliveryDelayMicros(timeUnit.toMicros(redeliveryDelay));
    return this;
}
 
Example #23
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> loadConf(Map<String, Object> config) {
    this.conf = ConfigurationDataUtils.loadData(config, conf, ConsumerConfigurationData.class);
    return this;
}
 
Example #24
Source File: ConsumerBuilderImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<T> clone() {
    return new ConsumerBuilderImpl<>(client, conf.clone(), schema);
}
 
Example #25
Source File: PulsarClientImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public <T> ConsumerBuilder<T> newConsumer(Schema<T> schema) {
    return new ConsumerBuilderImpl<>(this, schema);
}
 
Example #26
Source File: PulsarClientImpl.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@Override
public ConsumerBuilder<byte[]> newConsumer() {
    return new ConsumerBuilderImpl<>(this, Schema.BYTES);
}
 
Example #27
Source File: LeaderServiceTest.java    From pulsar with Apache License 2.0 4 votes vote down vote up
@BeforeMethod
public void setup() throws PulsarClientException {
    mockClient = mock(PulsarClientImpl.class);

    mockConsumer = mock(ConsumerImpl.class);
    ConsumerBuilder<byte[]> mockConsumerBuilder = mock(ConsumerBuilder.class);

    when(mockConsumerBuilder.topic(anyString())).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.subscriptionName(anyString())).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.subscriptionType(any(SubscriptionType.class))).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.property(anyString(), anyString())).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.consumerName(anyString())).thenReturn(mockConsumerBuilder);

    when(mockConsumerBuilder.subscribe()).thenReturn(mockConsumer);
    WorkerService workerService = mock(WorkerService.class);
    doReturn(workerConfig).when(workerService).getWorkerConfig();

    listenerHolder = new AtomicReference<>();
    when(mockConsumerBuilder.consumerEventListener(any(ConsumerEventListener.class))).thenAnswer(invocationOnMock -> {

        ConsumerEventListener listener = invocationOnMock.getArgument(0);
        listenerHolder.set(listener);

        return mockConsumerBuilder;
    });

    when(mockClient.newConsumer()).thenReturn(mockConsumerBuilder);

    schedulerManager = mock(SchedulerManager.class);

    functionAssignmentTailer = mock(FunctionAssignmentTailer.class);
    readToTheEndAndExitFuture = mock(CompletableFuture.class);
    when(functionAssignmentTailer.triggerReadToTheEndAndExit()).thenReturn(readToTheEndAndExitFuture);

    functionRuntimeManager = mock(FunctionRuntimeManager.class);
    functionMetadataManager = mock(FunctionMetaDataManager.class);

    metadataManagerInitFuture = mock(CompletableFuture.class);
    runtimeManagerInitFuture = mock(CompletableFuture.class);

    when(functionMetadataManager.getIsInitialized()).thenReturn(metadataManagerInitFuture);
    when(functionRuntimeManager.getIsInitialized()).thenReturn(runtimeManagerInitFuture);

    leaderService = spy(new LeaderService(workerService, mockClient, functionAssignmentTailer, schedulerManager,
      functionRuntimeManager, functionMetadataManager,  ErrorNotifier.getDefaultImpl()));
    leaderService.start();
}
 
Example #28
Source File: MembershipManagerTest.java    From pulsar with Apache License 2.0 4 votes vote down vote up
private static PulsarClient mockPulsarClient() throws PulsarClientException {
    PulsarClientImpl mockClient = mock(PulsarClientImpl.class);

    ConsumerImpl<byte[]> mockConsumer = mock(ConsumerImpl.class);
    ConsumerBuilder<byte[]> mockConsumerBuilder = mock(ConsumerBuilder.class);

    when(mockConsumerBuilder.topic(anyString())).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.subscriptionName(anyString())).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.subscriptionType(any(SubscriptionType.class))).thenReturn(mockConsumerBuilder);
    when(mockConsumerBuilder.property(anyString(), anyString())).thenReturn(mockConsumerBuilder);

    when(mockConsumerBuilder.subscribe()).thenReturn(mockConsumer);

    when(mockConsumerBuilder.consumerEventListener(any(ConsumerEventListener.class))).thenReturn(mockConsumerBuilder);

    when(mockClient.newConsumer()).thenReturn(mockConsumerBuilder);

    return mockClient;
}
 
Example #29
Source File: PulsarSinkTest.java    From pulsar with Apache License 2.0 4 votes vote down vote up
/**
 * Verify that JavaInstance does not support functions that take Void type as input.
 */
private static PulsarClientImpl getPulsarClient() throws PulsarClientException {
    PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class);
    ConsumerBuilder consumerBuilder = mock(ConsumerBuilder.class);
    doReturn(consumerBuilder).when(consumerBuilder).topics(anyList());
    doReturn(consumerBuilder).when(consumerBuilder).subscriptionName(anyString());
    doReturn(consumerBuilder).when(consumerBuilder).subscriptionType(any());
    doReturn(consumerBuilder).when(consumerBuilder).ackTimeout(anyLong(), any());
    Consumer consumer = mock(Consumer.class);
    doReturn(consumer).when(consumerBuilder).subscribe();
    doReturn(consumerBuilder).when(pulsarClient).newConsumer(any());
    doReturn(CompletableFuture.completedFuture(Optional.empty())).when(pulsarClient).getSchema(anyString());

    ProducerBuilder producerBuilder = mock(ProducerBuilder.class);
    doReturn(producerBuilder).when(producerBuilder).blockIfQueueFull(anyBoolean());
    doReturn(producerBuilder).when(producerBuilder).enableBatching(anyBoolean());
    doReturn(producerBuilder).when(producerBuilder).batchingMaxPublishDelay(anyLong(), any());
    doReturn(producerBuilder).when(producerBuilder).compressionType(any());
    doReturn(producerBuilder).when(producerBuilder).hashingScheme(any());
    doReturn(producerBuilder).when(producerBuilder).messageRoutingMode(any());
    doReturn(producerBuilder).when(producerBuilder).messageRouter(any());
    doReturn(producerBuilder).when(producerBuilder).topic(anyString());
    doReturn(producerBuilder).when(producerBuilder).producerName(anyString());
    doReturn(producerBuilder).when(producerBuilder).property(anyString(), anyString());
    doReturn(producerBuilder).when(producerBuilder).properties(any());
    doReturn(producerBuilder).when(producerBuilder).sendTimeout(anyInt(), any());

    CompletableFuture completableFuture = new CompletableFuture<>();
    completableFuture.complete(mock(MessageId.class));
    TypedMessageBuilder typedMessageBuilder = mock(TypedMessageBuilder.class);
    doReturn(completableFuture).when(typedMessageBuilder).sendAsync();

    Producer producer = mock(Producer.class);
    doReturn(producer).when(producerBuilder).create();
    doReturn(typedMessageBuilder).when(producer).newMessage();

    doReturn(producerBuilder).when(pulsarClient).newProducer();
    doReturn(producerBuilder).when(pulsarClient).newProducer(any());

    return pulsarClient;
}
 
Example #30
Source File: CmdConsume.java    From pulsar with Apache License 2.0 4 votes vote down vote up
private int consume(String topic) {
    int numMessagesConsumed = 0;
    int returnCode = 0;

    try {
        PulsarClient client = clientBuilder.build();
        ConsumerBuilder<byte[]> builder = client.newConsumer()
                .subscriptionName(this.subscriptionName)
                .subscriptionType(subscriptionType)
                .subscriptionInitialPosition(subscriptionInitialPosition);

        if (isRegex) {
            builder.topicsPattern(Pattern.compile(topic));
        } else {
            builder.topic(topic);
        }

        ConsumerBuilder<byte[]> consumerBuilder = client.newConsumer().topic(topic);
        if (this.maxPendingChuckedMessage > 0) {
            consumerBuilder.maxPendingChuckedMessage(this.maxPendingChuckedMessage);
        }
        if (this.receiverQueueSize > 0) {
            consumerBuilder.maxPendingChuckedMessage(this.receiverQueueSize);
        }
        Consumer<byte[]> consumer = consumerBuilder.subscriptionName(this.subscriptionName)
                .autoAckOldestChunkedMessageOnQueueFull(this.autoAckOldestChunkedMessageOnQueueFull)
                .subscriptionType(subscriptionType).subscribe();

        RateLimiter limiter = (this.consumeRate > 0) ? RateLimiter.create(this.consumeRate) : null;
        while (this.numMessagesToConsume == 0 || numMessagesConsumed < this.numMessagesToConsume) {
            if (limiter != null) {
                limiter.acquire();
            }

            Message<byte[]> msg = consumer.receive(5, TimeUnit.SECONDS);
            if (msg == null) {
                LOG.debug("No message to consume after waiting for 5 seconds.");
            } else {
                numMessagesConsumed += 1;
                System.out.println(MESSAGE_BOUNDARY);
                String output = this.interpretMessage(msg, displayHex);
                System.out.println(output);
                consumer.acknowledge(msg);
            }
        }
        client.close();
    } catch (Exception e) {
        LOG.error("Error while consuming messages");
        LOG.error(e.getMessage(), e);
        returnCode = -1;
    } finally {
        LOG.info("{} messages successfully consumed", numMessagesConsumed);
    }

    return returnCode;

}