3

假设有一个 Pulsar Producer 用于持久主题topic1(命名空间和租户与问题无关)。

假设我们有多个消费者为同一个主题 ( topic1) 使用不同的订阅名称。

是否可以配置消费者接收相同的消息?因此,例如,如果将消息msg1发送到主题consumer1consumer2接收此消息?

消费者和生产者都是用 Java 编写的,但编程语言并不重要。

澄清

当前对具有多个订阅的同一主题的多个订阅观察到的行为是,每个订阅者都不会收到已发布到该主题的所有消息。我需要接收来自该主题的所有消息。

4

2 回答 2

3

是的。多个消费者可以从一个主题接收相同的消息副本。订阅决定了消息如何传递给消费者。您需要的是每个消费者都有自己的Exclusive订阅。这是Java中的代码示例。

String topicName = "your-tenant/namespace/topic1"
Consumer consumer1 = client.newConsumer()
            .topic(topicName)
            .subscriptionName("my-subscription1")
            .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest)
            .subscriptionType(SubscriptionType.Exclusive)
            .subscribe();

// create another consumer
Consumer consumer2 = client.newConsumer()
            .topic(topicName)
            .subscriptionName("my-subscription2")
            .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest)
            .subscriptionType(SubscriptionType.Exclusive)
            .subscribe();

// two consumers receive messages in alternate from the same topic
while (true) {
        Message msgFromConsumer1 = consumer1.receive();

        Message msgFromConsumer2 = consumer2.receive();
}
于 2020-02-04T19:17:44.160 回答
3

是的,您只需要对该主题使用多个订阅。

我写了一篇关于这个确切主题的博客文章:“订阅:Pulsar 主题上的多个消费者组”

于 2020-02-05T01:02:27.590 回答