< For a single-topic consumer, wrapping the topic name is
< redundant and might break the existing behavior. In this case, if
< `PulsarApiMessageId` extends `TopicMessageId`, the `getTopicName()`
< method should return null, which is not a good design [1][2].

For `TopicMessageIdImpl`, it is an original method. for
`PulsarApiMessageId` if extend `TopicMessageId` it is a new method for
any `MessageId` extend `PulsarApiMessageId`, why do we have to return
null? I think it just reduces the transmission of useless fields at
the network layer and not added to MessageIdData. LedgerId and EntryId
are in PulsarApiMessageId, why shouldn't `topicName` be added in?

Thanks,
Bo

Yunze Xu <y...@streamnative.io.invalid> 于2022年12月18日周日 14:23写道:
>
> Hi Bo,
>
> Because the topic name is not a part of MessageIdData. It's only used
> to find the correct internal consumer of a multi-topics consumer.
>
> > All I can think of is PulsarApiMessageId extend TopicMessageId(PIP-224[1]) 
> > right?
>
> No. The `TopicMessageId` could only be used in a multi-topics
> consumer. For a single-topic consumer, wrapping the topic name is
> redundant and might break the existing behavior. In this case, if
> `PulsarApiMessageId` extends `TopicMessageId`, the `getTopicName()`
> method should return null, which is not a good design [1][2].
>
> After both PIP-224 and PIP-229 are approved, the `TopicMessageIdImpl`
> will implement both `PulsarApiMessageId` and `TopicMessageId`
> interfaces. Other `MessageId` implementations only need to implement
> `PulsarApiMessageId`.
>
> BTW, PIP-224 mainly solves two problems:
> 1. When a multi-topics consumer acknowledges a `MessageId` that is not
> a `TopicMessageId`, a `PulsarClientException.NotAllowedException` will
> be thrown in synchronous methods. The asynchronous methods should not
> throw an exception.
> 2. For a multi-topics consumer, support seeking with a `TopicMessageId`.
>
> PIP-224 is designed for application users to specify an associated
> topic name when using a `MessageId` in `seek` or `acknowledge` on a
> multi-topics consumer. PIP-229 is more like a refactoring to allow the
> experienced developers access the fields of `MessageIdData` via a
> standard interface.
>
> [1] https://github.com/apache/pulsar/issues/18616#issuecomment-1328609346
> [2] https://lists.apache.org/thread/g8o0qtljllxnvck69dn36205xg5xr8cc
>
> Thanks,
> Yunze
>
>
> On Fri, Dec 16, 2022 at 8:50 PM 丛搏 <bog...@apache.org> wrote:
> >
> > Abstraction based on MessageIdData is a good solution. I don't have
> > any discussion context. Why don't we put the topic name in it?
> >
> > All I can think of is PulsarApiMessageId extend
> > TopicMessageId(PIP-224[1]) right?
> >
> > Thanks,
> > Bo
> > [1] https://github.com/apache/pulsar/issues/18616
> >
> > Yunze Xu <y...@streamnative.io.invalid> 于2022年12月16日周五 15:59写道:
> > >
> > > Hi all,
> > >
> > > I've opened a PIP to discuss: 
> > > https://github.com/apache/pulsar/issues/18950
> > >
> > > Currently the `MessageId` interface is not friendly to developers of
> > > Pulsar core and ecosystems. There is no abstraction of the
> > > `MessageIdData` defined in `PulsarApi.proto`.
> > >
> > > This proposal aims at solving this problem and allows more loose type
> > > assertions when using `seek` and `acknowledge`.
> > >
> > > You can also see the demo for reference:
> > > https://github.com/BewareMyPower/pulsar/pull/11
> > >
> > > (Sorry I forgot to add the [DISCUSS] prefix again in the previous
> > > email, let's continue the discussion here)
> > >
> > > Thanks,
> > > Yunze

Reply via email to