You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by yukon <yu...@apache.org> on 2021/10/01 01:37:06 UTC

Re: [DISCUSS] RIP-25 Ease of Use Improvements on RocketMQ Client API

Great catch, we will draft a new version of client APIs in few days~

On Wed, Sep 29, 2021 at 4:19 PM dongeforever <do...@apache.org>
wrote:

> The idea is OK.
> And the same time, it is better to show more details.  Maybe drafting the
> new API interface is a good way to dive deep.
>
> caigy <cs...@163.com> 于2021年9月28日周二 下午5:40写道:
>
> > RIP-25 Ease of Use Improvements on RocketMQ Client API
> >
> >
> >   * Current Status: Draft
> >   * Authors: caigy https://github.com/caigy
> >   * Shepherds: duhengforever duhengforever@apache.org
> >   * Mailing List discussion: dev@rocketmq.apache.org
> >   * Pull Request: #PR_NUMBER
> >   * Released: <released_version>
> >
> >
> > Background & Motivation
> > ________________________________
> >
> > What do we need to do
> >  * will we add a new module? No.
> >  * will we add new APIs? Yes.
> >  * will we add new feature? No.
> >
> >
> > Why should we do that
> >  * Are there any problems of our current project?
> >     Currently, RocketMQ's client API is a bit complex, and there exists
> > some unreasonable encapsulation. For example:
> >     ** There are 20 methods for sending messages in DefaultProducer, with
> > lack of encapsulation, which increases complexity in usage.
> >     ** DefaultMQPushConsumer provides 10 constructors,which may make user
> > difficult to choose one.
> >     ** Class Message provides constructors with and without arguments,
> and
> > also provides getters/setters to operate fields of it,  which lacks good
> > separation of required and non-required arguments.
> >     API is important media for users to interact with RocketMQ, and it is
> > worth investing effort in optimizing its design.
> >
> > * What can we benefit proposed changes?
> >     Provide clear and easier-to-understand API of RocketMQ, make it
> easier
> > to use, especially for beginners.
> >
> >
> >
> > Goals
> > ________________________________
> >
> > * What problem is this proposal designed to solve?
> >    Optimize RocketMQ client APIs, including Producer, Consumer and
> > Message, remove unnecessary APIs, and provide better encapsulation.
> Current
> > unreasonable APIs will be marked deprecated and will be removed in the
> > future. After this optimization, the APIs should keep as stable as
> possible.
> >
> > * To what degree should we solve the problem?
> >     We wish developers can use RocketMQ more easily with new APIs.
> >
> >
> > Non-Goals
> > ________________________________
> >
> > * What problem is this proposal NOT designed to solve?
> >    This proposal will NOT change feature and performance.
> >
> > * Are there any limits of this proposal?
> >   Nothing specific.
> >
> >
> >
> > Changes
> > ________________________________
> >
> > * Architecture
> >  No architecture changes in this proposal.
> >
> > * Interface Design/Change
> >    ** Method signature changes. Yes.
> >    For example:
> >        *** Add generic to support data type of message body in Message.
> >        *** Support chain-call instantiation of Producer, Consumer,
> > Message, eg:Message<String>.builder().topic("msg  topic").body("msg
> > body").build();
> >        *** Producer provides unified and stable send() API, which is like
> > write() method of UNIX file I/O.
> >        *** Add asynchronous message consumption API based on
> > CompletableFuture in Consumer.
> >        *** etc...
> >
> >    ** Method behavior changes. No.  CLI command changes. No.
> >    ** Log format or content changes. No.
> >
> > * Compatibility, Deprecation, and Migration Plan
> >    ** Are backward and forward compatibility taken into consideration?
> >       Optimized APIs should NOT affect compatibility, some APIs would be
> > marked deprecated. New features will use optimized APIs, encouraging
> users
> > not to use deprecated APIs.
> >
> >    ** Are there deprecated APIs?
> >       Yes. Some unreasonable APIs will be deprecated in this RIP.
> >
> >   ** How do we do migration?
> >       Unreasonable APIs are marked deprecated in this proposal, and will
> > be removed in the future.
> >
> > * Implementation Outline
> >   We will implement the proposed changes by 1 phase.
> >   Phase 1
> >      1. Collect pain points in using RocketMQ client APIs and redesign
> > them.
> >      2. Optimize those APIs.
> >      3. Mark previous APIs deprecated.
> >
> >
>

Re: [DISCUSS] RIP-25 Ease of Use Improvements on RocketMQ Client API

Posted by Zhanhui Li <li...@apache.org>.
Agree, exiting API set require substantial improvement, to further refine
RocketMQ model.

On Fri, Oct 1, 2021 at 9:37 AM yukon <yu...@apache.org> wrote:

> Great catch, we will draft a new version of client APIs in few days~
>
> On Wed, Sep 29, 2021 at 4:19 PM dongeforever <do...@apache.org>
> wrote:
>
> > The idea is OK.
> > And the same time, it is better to show more details.  Maybe drafting the
> > new API interface is a good way to dive deep.
> >
> > caigy <cs...@163.com> 于2021年9月28日周二 下午5:40写道:
> >
> > > RIP-25 Ease of Use Improvements on RocketMQ Client API
> > >
> > >
> > >   * Current Status: Draft
> > >   * Authors: caigy https://github.com/caigy
> > >   * Shepherds: duhengforever duhengforever@apache.org
> > >   * Mailing List discussion: dev@rocketmq.apache.org
> > >   * Pull Request: #PR_NUMBER
> > >   * Released: <released_version>
> > >
> > >
> > > Background & Motivation
> > > ________________________________
> > >
> > > What do we need to do
> > >  * will we add a new module? No.
> > >  * will we add new APIs? Yes.
> > >  * will we add new feature? No.
> > >
> > >
> > > Why should we do that
> > >  * Are there any problems of our current project?
> > >     Currently, RocketMQ's client API is a bit complex, and there exists
> > > some unreasonable encapsulation. For example:
> > >     ** There are 20 methods for sending messages in DefaultProducer,
> with
> > > lack of encapsulation, which increases complexity in usage.
> > >     ** DefaultMQPushConsumer provides 10 constructors,which may make
> user
> > > difficult to choose one.
> > >     ** Class Message provides constructors with and without arguments,
> > and
> > > also provides getters/setters to operate fields of it,  which lacks
> good
> > > separation of required and non-required arguments.
> > >     API is important media for users to interact with RocketMQ, and it
> is
> > > worth investing effort in optimizing its design.
> > >
> > > * What can we benefit proposed changes?
> > >     Provide clear and easier-to-understand API of RocketMQ, make it
> > easier
> > > to use, especially for beginners.
> > >
> > >
> > >
> > > Goals
> > > ________________________________
> > >
> > > * What problem is this proposal designed to solve?
> > >    Optimize RocketMQ client APIs, including Producer, Consumer and
> > > Message, remove unnecessary APIs, and provide better encapsulation.
> > Current
> > > unreasonable APIs will be marked deprecated and will be removed in the
> > > future. After this optimization, the APIs should keep as stable as
> > possible.
> > >
> > > * To what degree should we solve the problem?
> > >     We wish developers can use RocketMQ more easily with new APIs.
> > >
> > >
> > > Non-Goals
> > > ________________________________
> > >
> > > * What problem is this proposal NOT designed to solve?
> > >    This proposal will NOT change feature and performance.
> > >
> > > * Are there any limits of this proposal?
> > >   Nothing specific.
> > >
> > >
> > >
> > > Changes
> > > ________________________________
> > >
> > > * Architecture
> > >  No architecture changes in this proposal.
> > >
> > > * Interface Design/Change
> > >    ** Method signature changes. Yes.
> > >    For example:
> > >        *** Add generic to support data type of message body in Message.
> > >        *** Support chain-call instantiation of Producer, Consumer,
> > > Message, eg:Message<String>.builder().topic("msg  topic").body("msg
> > > body").build();
> > >        *** Producer provides unified and stable send() API, which is
> like
> > > write() method of UNIX file I/O.
> > >        *** Add asynchronous message consumption API based on
> > > CompletableFuture in Consumer.
> > >        *** etc...
> > >
> > >    ** Method behavior changes. No.  CLI command changes. No.
> > >    ** Log format or content changes. No.
> > >
> > > * Compatibility, Deprecation, and Migration Plan
> > >    ** Are backward and forward compatibility taken into consideration?
> > >       Optimized APIs should NOT affect compatibility, some APIs would
> be
> > > marked deprecated. New features will use optimized APIs, encouraging
> > users
> > > not to use deprecated APIs.
> > >
> > >    ** Are there deprecated APIs?
> > >       Yes. Some unreasonable APIs will be deprecated in this RIP.
> > >
> > >   ** How do we do migration?
> > >       Unreasonable APIs are marked deprecated in this proposal, and
> will
> > > be removed in the future.
> > >
> > > * Implementation Outline
> > >   We will implement the proposed changes by 1 phase.
> > >   Phase 1
> > >      1. Collect pain points in using RocketMQ client APIs and redesign
> > > them.
> > >      2. Optimize those APIs.
> > >      3. Mark previous APIs deprecated.
> > >
> > >
> >
>