You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by "Jason.Chen" <ch...@foxmail.com> on 2022/03/16 04:55:54 UTC

[DISCUSS] RIP-35 queue service framework(QSF)

Status
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current State: Proposed
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Authors: booom( booom (jason) · GitHub)
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mailing List discussion: dev@rocketmq.apache.org
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pull Request: 
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Released: <relased_version&gt;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add a new module? Yes.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add new APIs? No.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume message, we should code to manage the mq infrastructure, and mixed it up with our business logic codes. 
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What can we benefit proposed changes?
 
1.&nbsp;&nbsp;&nbsp;&nbsp; Encapsulate mq client API to support method invoking style usage.
 
2.&nbsp;&nbsp;&nbsp;&nbsp; The encapsulation is easily extensible, to support idempotence/eventually consistent/ fluid control extensions and so on.
 
3.&nbsp;&nbsp;&nbsp;&nbsp; Isolate the mq client manage code and the business logic code, to help mq users improve their systems’ maintainability.
 
&nbsp;
 
Goals
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What problem is this proposal designed to solve?
 
Unobtrusive mq client usage, and easily extensible to support idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What problem is this proposal NOT designed to solve?
 
1.&nbsp;&nbsp;&nbsp;&nbsp; Add new features to classics mq client.
 
2.&nbsp;&nbsp;&nbsp;&nbsp; Affect compatibility.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
Interface Design/Change
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method signature changes
 
○&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;method name
 
○&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;parameter list
 
○&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;return value
 
Nothing.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method behavior changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLI command changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are backward and forward compatibility taken into consideration?
 
Yes.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there deprecated APIs?
 
Nothing.
 
●&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented and works well in our project)
 
Phase 1
   
Complete      the QSF mq client encapsulation.
  
Complete      the QSF idempotency support
  
Rejected Alternatives 
 
There are no other alternatives.

Re: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by yukon <yu...@apache.org>.
Is anyone interested in this RIP? Please feel free to express your opinions.

About this RIP, my concern is that QSF encapsulates the details of the
producer/consumer may lead to troubleshooting complicated, although QSF is
simple.

Regards,
yukon

On Tue, Mar 29, 2022 at 1:43 AM Jason.Chen <ch...@foxmail.com> wrote:

> QSF architecture diagram updated, please see attached.
>
>
>
> ------------------ 原始邮件 ------------------
> *发件人:* "Jason.Chen" <ch...@foxmail.com>;
> *发送时间:* 2022年3月29日(星期二) 凌晨1:39
> *收件人:* "dev"<de...@rocketmq.apache.org>;
> *主题:* re: [DISCUSS] RIP-35 queue service framework(QSF)
>
> QSF architecture diagram updated here:
>
>
>
>
> ————————— 原始邮件 —————————
> 发件人: “Jason.Chen” chenhuanzu@foxmail.com
> <ht...@foxmail.com>;
> 发送时间: 2022年3月25日(星期五) 晚上11:35
> 收件人: “dev”dev@rocketmq.apache.org <ht...@rocketmq.apache.org>;
> 主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
>
> Sorry for posting a demo of an old version of QSF, the demo of the
> optimized QSF is as follows:
>
> //message producer
>
> @RestController
> @RequestMapping(“/demo/qsf”)
> @Slf4j
> public class TestController {
>
> @QSFConsumer(topic = "rocketmq_topic_qsf_demo", methodSpecials = {
>     @QSFConsumer.ConsumerMethodSpecial(methodName = "testQSFCallback", syncCall = true)
> })
> private QSFDemoService qsfDemoService;
>
> @GetMapping(("/basic"))
> public Map<String, String> qsfBasic(HttpServletRequest request) {
>     Map<String, String> resultMap = new HashMap<>();
>
>     // test QSF basic usage
>     qsfDemoService.testQSFBasic(100L, "hello world");
>
>     return resultMap;
> }
>
> @GetMapping(("/idem"))
> public Map<String, String> qsfIdempotency(HttpServletRequest request) {
>     Map<String, String> resultMap = new HashMap<>();
>
>     // test QSF idempotency, method with same parameters will be invoked exactly once
>     qsfDemoService.testQSFIdempotency(100L, "hello world");
>     qsfDemoService.testQSFIdempotency(100L, "hello world");
>
>     return resultMap;
> }
>
> }
>
> // message consumer
>
> @QSFProvider(consumerId = “rocketmq_consumer_qsf_demo”, topic =
> “rocketmq_topic_qsf_demo”)
> @Slf4j
> public class QSFDemoServiceImpl implements QSFDemoService {
>
> @Override
> public void testQSFBasic(long id, String name) {
>     log.info("in service call: testQSFBasic id:{} name:{}", id, name);
> }
>
> @Override
> @QSFIdempotency(idempotentMethodExecuteTimeout = 1000)
> public void testQSFIdempotency(long id, String name) {
>     log.info("in service call: testQSFIdempotency id:{} name:{}", id, name);
> }
>
> }
>
> ————————— 原始邮件 —————————
> 发件人: “Jason.Chen” chenhuanzu@foxmail.com
> <ht...@foxmail.com>;
> 发送时间: 2022年3月25日(星期五) 晚上9:25
> 收件人: “dev”dev@rocketmq.apache.org <ht...@rocketmq.apache.org>;
> 主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
>
> ————————— 原始邮件 —————————
> 发件人: “Jason.Chen” chenhuanzu@foxmail.com
> <ht...@foxmail.com>;
> 发送时间: 2022年3月16日(星期三) 晚上9:39
> 收件人: “dev”dev@rocketmq.apache.org <ht...@rocketmq.apache.org>;
> 主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
>
> Thanks Reply:)
>
> QSF is a step further than rocketmq-spring. Using QSF, users can get the
> most intuitive experience that is almost identical to that of local method
> calls; moreover, QSF reserves a good extension capability, which can easily
> provide features such as idempotent, eventual consistency and flow control
> and so on.
>
> For a simple usage example of QSF, please see the discussion above :)
>
> ————————— 原始邮件 —————————
> 发件人: “dev” duhengforever@apache.org
> <ht...@apache.org>;
> 发送时间: 2022年3月16日(星期三) 晚上8:44
> 收件人: “dev”dev@rocketmq.apache.org <ht...@rocketmq.apache.org>;
> 主题: Re: [DISCUSS] RIP-35 queue service framework(QSF)
>
> Nice to see this proposal of yours, but it seems a bit like what
> rocketmq-spring[1] does, so can you elaborate on the difference between QSF
> and rocketmq-spring?
>
> [1]https://github.com/apache/rocketmq-spring
>
> yukon yukon@apache.org <ht...@apache.org> 于2022年3月16日周三
> 20:23写道:
>
> Could you please provide some demos to show how we use
> QSFProducer/Consumer?
>
> On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen chenhuanzu@foxmail.com
> <ht...@foxmail.com> wrote:
>
> I am sorry that the RIP mail format is incorrect, and i write a
> well-formed google doc version here:
>
>
> https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
>
> RIP 35 queue service framework(QSF)
>
> Status
>
> ●  Current State: Proposed
>
> ●  Authors: booom( booom (jason) · GitHub)
>
> ●  Shepherds: yukon( zhouxinyu (yukon) · GitHub)
>
> ●  Mailing List discussion: dev@rocketmq.apache.org
>
> ●  Pull Request:
>
> ●  Released:
>
> Background & Motivation
>
> What do we need to do
>
> ●  Will we add a new module? Yes.
>
> ●  Will we add new APIs? No.
>
> ●  Will we add new feature? Yes.
>
> Why should we do that
>
> ●  Are there any problems of our current project?
>
> The current mq client API is intrusive, to send message or consume
> message, we should code to manage the mq infrastructure, and mixed it up
> with our business logic codes.
>
> ●  What can we benefit proposed changes?
>
>    1.
>
>    Encapsulate mq client API to support method invoking style usage.
>    2.
>
>    The encapsulation is easily extensible, to support
>    idempotence/eventually consistent/ fluid control extensions and so on.
>    3.
>
>    Isolate the mq client manage code and the business logic code, to
>    help mq users improve their systems’ maintainability.
>
> Goals
>
> ●  What problem is this proposal designed to solve?
>
> Unobtrusive mq client usage, and easily extensible to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> ●  To what degree should we solve the problem?
>
> 100%.
>
> Non-Goals
>
> ●  What problem is this proposal NOT designed to solve?
>
>    1.
>
>    Add new features to classics mq client.
>    2.
>
>    Affect compatibility.
>
> ●  Are there any limits of this proposal?
>
> Only QSF(queue service framework) users will benefit.
>
> Changes
>
> Architecture
>
> To simplify a process, we need to consider what information is essential
> and must be provided by users to execute this process? How to properly
> organize this information so that it is most user-friendly?
>
> Along this thinking path, we have extracted the necessary parameters for
> mq calls and organized them into the java annotations @QSFConsumer and
> @QSFProvider. After that, through the extension support of spring
> container
> in each stage of bean life cycle, we can process @QSFConsumer
> @QSFProvider
> annotation in BeanPostProcessor, extract method invocation information to
> method invocation information object MethodInvokeInfo and send it out,
> and
> locate it through MethodInvokeInfo at the message receiving endpoint. The
> bean where the call is made, the method where it is located, the
> parameters
> used, and then the method is called by reflection.
>
> Interface Design/Change
>
> ●  Method signature changes
>
> ○      method name
>
> ○      parameter list
>
> ○      return value
>
> Nothing.
>
> ●  Method behavior changes
>
> Nothing.
>
> ●  CLI command changes
>
> Nothing.
>
> ●  Log format or content changes
>
> Nothing.
>
>  Compatibility, Deprecation, and Migration Plan
>
> ●  Are backward and forward compatibility taken into
> consideration?
>
> Yes.
>
> ●  Are there deprecated APIs?
>
> Nothing.
>
> ●  How do we do migration?
>
> Upgrade normally, no additional migration required.
>
> Implementation Outline
>
> We will implement the proposed changes by 1 phase. (QSF is implemented
> and
> works well in our project)
>
> Phase 1
>
> Complete the QSF mq client encapsulation.
>
> Complete the QSF idempotency support
>
> Rejected Alternatives
>
> There are no other alternatives.
>
> ————————— 原始邮件 —————————
> 发件人:
> “Jason.Chen”
> <
> chenhuanzu@foxmail.com>;
> 发送时间: 2022年3月16日(星期三) 中午12:55
> 收件人: ”dev”<de...@rocketmq.apache.org>;
>
> 主题: [DISCUSS] RIP-35 queue service framework(QSF)
>
> Status
>
> ●      Current State: Proposed
>
> ●      Authors: booom( booom (jason) · GitHub)
>
> ●      Shepherds: yukon( zhouxinyu (yukon) · GitHub)
>
> ●      Mailing List discussion:
> dev@rocketmq.apache.org
>
> ●      Pull Request:
>
> ●      Released: <relased_version>
>
> Background & Motivation
>
> What do we need to do
>
> ●      Will we add a new module? Yes.
>
> ●      Will we add new APIs? No.
>
> ●      Will we add new feature? Yes.
>
> Why should we do that
>
> ●      Are there any problems of our current project?
>
> The current mq client API is intrusive, to send message or consume
> message, we should code to manage the mq infrastructure, and mixed it up
> with our business logic codes.
>
> ●      What can we benefit proposed changes?
>
> 1.     Encapsulate mq client API to support method
> invoking
> style usage.
>
> 2.     The encapsulation is easily extensible, to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> 3.     Isolate the mq client manage code and the business
> logic code, to help mq users improve their systems’ maintainability.
>
>
>
> Goals
>
> ●      What problem is this proposal designed to
> solve?
>
> Unobtrusive mq client usage, and easily extensible to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> ●      To what degree should we solve the problem?
>
> 100%.
>
> Non-Goals
>
> ●      What problem is this proposal NOT designed to
> solve?
>
> 1.     Add new features to classics mq client.
>
> 2.     Affect compatibility.
>
> ●      Are there any limits of this proposal?
>
> Only QSF(queue service framework) users will benefit.
>
> Changes
>
> Architecture
>
> Interface Design/Change
>
> ●      Method signature changes
>
> ○          method name
>
> ○          parameter list
>
> ○          return value
>
> Nothing.
>
> ●      Method behavior changes
>
> Nothing.
>
> ●      CLI command changes
>
> Nothing.
>
> ●      Log format or content changes
>
> Nothing.
>
>  Compatibility, Deprecation, and Migration Plan
>
> ●      Are backward and forward compatibility taken
> into consideration?
>
> Yes.
>
> ●      Are there deprecated APIs?
>
> Nothing.
>
> ●      How do we do migration?
>
> Upgrade normally, no additional migration required.
>
> Implementation Outline
>
> We will implement the proposed changes by 1 phase. (QSF is implemented
> and
> works well in our project)
>
> Phase 1
>
> Complete the QSF mq client encapsulation.
>
> Complete the QSF idempotency support
>
> Rejected Alternatives
>
> There are no other alternatives.
>
> ​
>

re: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
QSF architecture diagram updated,&nbsp;please see attached.







------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "Jason.Chen"                                                                                    <chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月29日(星期二) 凌晨1:39
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;re: [DISCUSS] RIP-35 queue service framework(QSF)




QSF architecture diagram updated here:








————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月25日(星期五) 晚上11:35
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
Sorry for posting a demo of an old version of QSF, the demo of the optimized QSF is as follows:
 
//message producer
 
@RestController
@RequestMapping(“/demo/qsf”)
@Slf4j
public class TestController {
 @QSFConsumer(topic = "rocketmq_topic_qsf_demo", methodSpecials = {     @QSFConsumer.ConsumerMethodSpecial(methodName = "testQSFCallback", syncCall = true) }) private QSFDemoService qsfDemoService; @GetMapping(("/basic")) public Map<String, String&gt; qsfBasic(HttpServletRequest request) {     Map<String, String&gt; resultMap = new HashMap<&gt;();     // test QSF basic usage     qsfDemoService.testQSFBasic(100L, "hello world");     return resultMap; } @GetMapping(("/idem")) public Map<String, String&gt; qsfIdempotency(HttpServletRequest request) {     Map<String, String&gt; resultMap = new HashMap<&gt;();     // test QSF idempotency, method with same parameters will be invoked exactly once     qsfDemoService.testQSFIdempotency(100L, "hello world");     qsfDemoService.testQSFIdempotency(100L, "hello world");     return resultMap; } 
}
 
// message consumer
 
@QSFProvider(consumerId = “rocketmq_consumer_qsf_demo”, topic = “rocketmq_topic_qsf_demo”)
@Slf4j
public class QSFDemoServiceImpl implements QSFDemoService {
 @Override public void testQSFBasic(long id, String name) {     log.info("in service call: testQSFBasic id:{} name:{}", id, name); } @Override @QSFIdempotency(idempotentMethodExecuteTimeout = 1000) public void testQSFIdempotency(long id, String name) {     log.info("in service call: testQSFIdempotency id:{} name:{}", id, name); } 
}
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月25日(星期五) 晚上9:25
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月16日(星期三) 晚上9:39
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
Thanks Reply:)
 
QSF is a step further than rocketmq-spring. Using QSF, users can get the most intuitive experience that is almost identical to that of local method calls; moreover, QSF reserves a good extension capability, which can easily provide features such as idempotent, eventual consistency and flow control and so on.
 
For a simple usage example of QSF, please see the discussion above :)
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “dev”                                                                                    duhengforever@apache.org;
发送时间: 2022年3月16日(星期三) 晚上8:44
收件人: “dev”dev@rocketmq.apache.org;
主题: Re: [DISCUSS] RIP-35 queue service framework(QSF)
 
Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?
 
[1]https://github.com/apache/rocketmq-spring
 
yukon yukon@apache.org 于2022年3月16日周三 20:23写道:
  
Could you please provide some demos to show how we use
QSFProducer/Consumer?
 
On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen chenhuanzu@foxmail.com wrote:
  
I am sorry that the RIP mail format is incorrect, and i write a
well-formed google doc version here:
 
https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
 
RIP 35 queue service framework(QSF)
 
Status
 
●&nbsp;         Current State: Proposed
 
●&nbsp;         Authors: booom( booom (jason) · GitHub)
 
●&nbsp;         Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;         Mailing List discussion: dev@rocketmq.apache.org
 
●&nbsp;         Pull Request:
 
●&nbsp;         Released: 
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;         Will we add a new module? Yes.
 
●&nbsp;         Will we add new APIs? No.
 
●&nbsp;         Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;         Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp;         What can we benefit proposed changes?
  

Encapsulate mq client API to support method invoking style usage.
 
 

The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
 

Isolate the mq client manage code and the business logic code, to
help mq users improve their systems’ maintainability.
 
  
Goals
 
●&nbsp;         What problem is this proposal designed to solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;         To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;         What problem is this proposal NOT designed to solve?
  

Add new features to classics mq client.
 
 

Affect compatibility.
 
  
●&nbsp;         Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
To simplify a process, we need to consider what information is essential
and must be provided by users to execute this process? How to properly
organize this information so that it is most user-friendly? 
 
Along this thinking path, we have extracted the necessary parameters for
mq calls and organized them into the java annotations @QSFConsumer and
@QSFProvider. After that, through the extension support of spring
container
in each stage of bean life cycle, we can process @QSFConsumer
@QSFProvider
annotation in BeanPostProcessor, extract method invocation information to
method invocation information object MethodInvokeInfo and send it out,
and
locate it through MethodInvokeInfo at the message receiving endpoint. The
bean where the call is made, the method where it is located, the
parameters
used, and then the method is called by reflection.
 
Interface Design/Change
 
●&nbsp;         Method signature changes
 
○&nbsp;         &nbsp; &nbsp; method name
 
○&nbsp;         &nbsp; &nbsp; parameter list
 
○&nbsp;         &nbsp; &nbsp; return value
 
Nothing.
 
●&nbsp;         Method behavior changes
 
Nothing.
 
●&nbsp;         CLI command changes
 
Nothing.
 
●&nbsp;         Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;         Are backward and forward compatibility taken into
consideration?
 
Yes.
 
●&nbsp;         Are there deprecated APIs?
 
Nothing.
 
●&nbsp;         How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete the QSF mq client encapsulation.
 
Complete the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
 
————————— 原始邮件 —————————
发件人:
                                                  “Jason.Chen”
                                                                      <
chenhuanzu@foxmail.com&gt;;
发送时间: 2022年3月16日(星期三) 中午12:55
收件人: ”dev”<dev@rocketmq.apache.org&gt;;
 
主题: [DISCUSS] RIP-35 queue service framework(QSF)
 
Status
 
●&nbsp; &nbsp; &nbsp; Current State: Proposed
 
●&nbsp; &nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
 
●&nbsp; &nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp; &nbsp; &nbsp; Mailing List discussion:
dev@rocketmq.apache.org
 
●&nbsp; &nbsp; &nbsp; Pull Request:
 
●&nbsp; &nbsp; &nbsp; Released: <relased_version&gt;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp; &nbsp; &nbsp; Will we add a new module? Yes.
 
●&nbsp; &nbsp; &nbsp; Will we add new APIs? No.
 
●&nbsp; &nbsp; &nbsp; Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp; &nbsp; &nbsp; Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp; &nbsp; &nbsp; What can we benefit proposed changes?
 
1. &nbsp; &nbsp; Encapsulate mq client API to support method
invoking
style usage.
 
2. &nbsp; &nbsp; The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
3. &nbsp; &nbsp; Isolate the mq client manage code and the business
logic code, to help mq users improve their systems’ maintainability.
 
&nbsp;
 
Goals
 
●&nbsp; &nbsp; &nbsp; What problem is this proposal designed to
solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp; &nbsp; &nbsp; To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp; &nbsp; &nbsp; What problem is this proposal NOT designed to
solve?
 
1. &nbsp; &nbsp; Add new features to classics mq client.
 
2. &nbsp; &nbsp; Affect compatibility.
 
●&nbsp; &nbsp; &nbsp; Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
Interface Design/Change
 
●&nbsp; &nbsp; &nbsp; Method signature changes
 
○&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; method name
 
○&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parameter list
 
○&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return value
 
Nothing.
 
●&nbsp; &nbsp; &nbsp; Method behavior changes
 
Nothing.
 
●&nbsp; &nbsp; &nbsp; CLI command changes
 
Nothing.
 
●&nbsp; &nbsp; &nbsp; Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp; &nbsp; &nbsp; Are backward and forward compatibility taken
into consideration?
 
Yes.
 
●&nbsp; &nbsp; &nbsp; Are there deprecated APIs?
 
Nothing.
 
●&nbsp; &nbsp; &nbsp; How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete      the QSF mq client encapsulation.
 
Complete      the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
   ​

re: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
QSF architecture&nbsp;diagram updated here:








————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月25日(星期五) 晚上11:35
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
Sorry for posting a demo of an old version of QSF, the demo of the optimized QSF is as follows:
 
//message producer
 
@RestController
@RequestMapping(“/demo/qsf”)
@Slf4j
public class TestController {
 @QSFConsumer(topic = "rocketmq_topic_qsf_demo", methodSpecials = {     @QSFConsumer.ConsumerMethodSpecial(methodName = "testQSFCallback", syncCall = true) }) private QSFDemoService qsfDemoService; @GetMapping(("/basic")) public Map<String, String&gt; qsfBasic(HttpServletRequest request) {     Map<String, String&gt; resultMap = new HashMap<&gt;();     // test QSF basic usage     qsfDemoService.testQSFBasic(100L, "hello world");     return resultMap; } @GetMapping(("/idem")) public Map<String, String&gt; qsfIdempotency(HttpServletRequest request) {     Map<String, String&gt; resultMap = new HashMap<&gt;();     // test QSF idempotency, method with same parameters will be invoked exactly once     qsfDemoService.testQSFIdempotency(100L, "hello world");     qsfDemoService.testQSFIdempotency(100L, "hello world");     return resultMap; } 
}
 
// message consumer
 
@QSFProvider(consumerId = “rocketmq_consumer_qsf_demo”, topic = “rocketmq_topic_qsf_demo”)
@Slf4j
public class QSFDemoServiceImpl implements QSFDemoService {
 @Override public void testQSFBasic(long id, String name) {     log.info("in service call: testQSFBasic id:{} name:{}", id, name); } @Override @QSFIdempotency(idempotentMethodExecuteTimeout = 1000) public void testQSFIdempotency(long id, String name) {     log.info("in service call: testQSFIdempotency id:{} name:{}", id, name); } 
}
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月25日(星期五) 晚上9:25
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月16日(星期三) 晚上9:39
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
Thanks Reply:)
 
QSF is a step further than rocketmq-spring. Using QSF, users can get the most intuitive experience that is almost identical to that of local method calls; moreover, QSF reserves a good extension capability, which can easily provide features such as idempotent, eventual consistency and flow control and so on.
 
For a simple usage example of QSF, please see the discussion above :)
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “dev”                                                                                    duhengforever@apache.org;
发送时间: 2022年3月16日(星期三) 晚上8:44
收件人: “dev”dev@rocketmq.apache.org;
主题: Re: [DISCUSS] RIP-35 queue service framework(QSF)
 
Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?
 
[1]https://github.com/apache/rocketmq-spring
 
yukon yukon@apache.org 于2022年3月16日周三 20:23写道:
  
Could you please provide some demos to show how we use
QSFProducer/Consumer?
 
On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen chenhuanzu@foxmail.com wrote:
  
I am sorry that the RIP mail format is incorrect, and i write a
well-formed google doc version here:
 
https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
 
RIP 35 queue service framework(QSF)
 
Status
 
●&nbsp;         Current State: Proposed
 
●&nbsp;         Authors: booom( booom (jason) · GitHub)
 
●&nbsp;         Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;         Mailing List discussion: dev@rocketmq.apache.org
 
●&nbsp;         Pull Request:
 
●&nbsp;         Released:&nbsp;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;         Will we add a new module? Yes.
 
●&nbsp;         Will we add new APIs? No.
 
●&nbsp;         Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;         Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp;         What can we benefit proposed changes?
  

Encapsulate mq client API to support method invoking style usage.
 
 

The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
 

Isolate the mq client manage code and the business logic code, to
help mq users improve their systems’ maintainability.
 
  
Goals
 
●&nbsp;         What problem is this proposal designed to solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;         To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;         What problem is this proposal NOT designed to solve?
  

Add new features to classics mq client.
 
 

Affect compatibility.
 
  
●&nbsp;         Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
To simplify a process, we need to consider what information is essential
and must be provided by users to execute this process? How to properly
organize this information so that it is most user-friendly?&nbsp;
 
Along this thinking path, we have extracted the necessary parameters for
mq calls and organized them into the java annotations @QSFConsumer and
@QSFProvider. After that, through the extension support of spring
container
in each stage of bean life cycle, we can process @QSFConsumer
@QSFProvider
annotation in BeanPostProcessor, extract method invocation information to
method invocation information object MethodInvokeInfo and send it out,
and
locate it through MethodInvokeInfo at the message receiving endpoint. The
bean where the call is made, the method where it is located, the
parameters
used, and then the method is called by reflection.
 
Interface Design/Change
 
●&nbsp;         Method signature changes
 
○&nbsp;         &nbsp; &nbsp; method name
 
○&nbsp;         &nbsp; &nbsp; parameter list
 
○&nbsp;         &nbsp; &nbsp; return value
 
Nothing.
 
●&nbsp;         Method behavior changes
 
Nothing.
 
●&nbsp;         CLI command changes
 
Nothing.
 
●&nbsp;         Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;         Are backward and forward compatibility taken into
consideration?
 
Yes.
 
●&nbsp;         Are there deprecated APIs?
 
Nothing.
 
●&nbsp;         How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete the QSF mq client encapsulation.
 
Complete the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
 
—————————&nbsp;原始邮件&nbsp;—————————
发件人:
                                                  “Jason.Chen”
                                                                      <
chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 中午12:55
收件人:&nbsp;”dev”<dev@rocketmq.apache.org&gt;;
 
主题:&nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
 
Status
 
●&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
 
●&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion:
dev@rocketmq.apache.org
 
●&nbsp;&nbsp;&nbsp; &nbsp; Pull Request:
 
●&nbsp;&nbsp;&nbsp; &nbsp; Released: <relased_version&gt;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
 
1.&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method
invoking
style usage.
 
2.&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
3.&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business
logic code, to help mq users improve their systems’ maintainability.
 
&nbsp;
 
Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to
solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to
solve?
 
1.&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
 
2.&nbsp;&nbsp; &nbsp; Affect compatibility.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
Interface Design/Change
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; method name
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; parameter list
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return value
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken
into consideration?
 
Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete      the QSF mq client encapsulation.
 
Complete      the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
   ​

回复: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
Sorry for posting a demo of an old version of QSF, the demo of the optimized QSF is as follows:


//message producer
@RestController
@RequestMapping("/demo/qsf")
@Slf4j
public class TestController {

    @QSFConsumer(topic = "rocketmq_topic_qsf_demo", methodSpecials = {
        @QSFConsumer.ConsumerMethodSpecial(methodName = "testQSFCallback", syncCall = true)
    })
    private QSFDemoService qsfDemoService;

    @GetMapping(("/basic"))
    public Map<String, String&gt; qsfBasic(HttpServletRequest request) {
        Map<String, String&gt; resultMap = new HashMap<&gt;();

        // test QSF basic usage
        qsfDemoService.testQSFBasic(100L, "hello world");

        return resultMap;
    }

    @GetMapping(("/idem"))
    public Map<String, String&gt; qsfIdempotency(HttpServletRequest request) {
        Map<String, String&gt; resultMap = new HashMap<&gt;();

        // test QSF idempotency, method with same parameters will be invoked exactly once
        qsfDemoService.testQSFIdempotency(100L, "hello world");
        qsfDemoService.testQSFIdempotency(100L, "hello world");

        return resultMap;
    }
}


// message consumer
@QSFProvider(consumerId = "rocketmq_consumer_qsf_demo", topic = "rocketmq_topic_qsf_demo")
@Slf4j
public class QSFDemoServiceImpl implements QSFDemoService {

    @Override
    public void testQSFBasic(long id, String name) {
        log.info("in service call: testQSFBasic id:{} name:{}", id, name);
    }

    @Override
    @QSFIdempotency(idempotentMethodExecuteTimeout = 1000)
    public void testQSFIdempotency(long id, String name) {
        log.info("in service call: testQSFIdempotency id:{} name:{}", id, name);
    }
}


------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "Jason.Chen"                                                                                    <chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月25日(星期五) 晚上9:25
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;回复: [DISCUSS] RIP-35 queue service framework(QSF)









------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "Jason.Chen"                                                                                    <chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 晚上9:39
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;回复: [DISCUSS] RIP-35 queue service framework(QSF)



Thanks Reply:)


QSF is a step further than rocketmq-spring. Using QSF, users can get the most intuitive experience that is almost identical to that of local method calls; moreover, QSF reserves a good extension capability, which can easily provide features such as idempotent, eventual consistency and flow control and so on.


For a simple usage example of QSF, please see the discussion above :)





------------------ 原始邮件 ------------------
发件人:                                                                                                                        "dev"                                                                                    <duhengforever@apache.org&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 晚上8:44
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;Re: [DISCUSS] RIP-35 queue service framework(QSF)



Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?

[1]https://github.com/apache/rocketmq-spring

yukon <yukon@apache.org&gt; 于2022年3月16日周三 20:23写道:

&gt; Could you please provide some demos to show how we use
&gt; QSFProducer/Consumer?
&gt;
&gt; On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen <chenhuanzu@foxmail.com&gt; wrote:
&gt;
&gt; &gt; I am sorry that the RIP mail format is incorrect, and i write a
&gt; &gt; well-formed google doc version here:
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; RIP 35 queue service framework(QSF)
&gt; &gt;
&gt; &gt; Status
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion: dev@rocketmq.apache.org
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Pull Request:
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Released:&amp;nbsp;
&gt; &gt;
&gt; &gt; Background &amp;amp; Motivation
&gt; &gt;
&gt; &gt; What do we need to do
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
&gt; &gt;
&gt; &gt; Why should we do that
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
&gt; &gt;
&gt; &gt; The current mq client API is intrusive, to send message or consume
&gt; &gt; message, we should code to manage the mq infrastructure, and mixed it up
&gt; &gt; with our business logic codes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
&gt; &gt;
&gt; &gt; 1.&nbsp;&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method invoking style usage.
&gt; &gt;
&gt; &gt; 2.&nbsp;&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; 3.&nbsp;&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business logic code, to
&gt; &gt; help mq users improve their systems’ maintainability.
&gt; &gt;
&gt; &gt; Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to solve?
&gt; &gt;
&gt; &gt; Unobtrusive mq client usage, and easily extensible to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
&gt; &gt;
&gt; &gt; 100%.
&gt; &gt;
&gt; &gt; Non-Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to solve?
&gt; &gt;
&gt; &gt; 1.&nbsp;&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
&gt; &gt;
&gt; &gt; 2.&nbsp;&nbsp;&nbsp; &nbsp; Affect compatibility.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
&gt; &gt;
&gt; &gt; Only QSF(queue service framework) users will benefit.
&gt; &gt;
&gt; &gt; Changes
&gt; &gt;
&gt; &gt; Architecture
&gt; &gt;
&gt; &gt; To simplify a process, we need to consider what information is essential
&gt; &gt; and must be provided by users to execute this process? How to properly
&gt; &gt; organize this information so that it is most user-friendly?&amp;nbsp;
&gt; &gt;
&gt; &gt;
&gt; &gt; Along this thinking path, we have extracted the necessary parameters for
&gt; &gt; mq calls and organized them into the java annotations @QSFConsumer and
&gt; &gt; @QSFProvider. After that, through the extension support of spring
&gt; container
&gt; &gt; in each stage of bean life cycle, we can process @QSFConsumer
&gt; @QSFProvider
&gt; &gt; annotation in BeanPostProcessor, extract method invocation information to
&gt; &gt; method invocation information object MethodInvokeInfo and send it out,
&gt; and
&gt; &gt; locate it through MethodInvokeInfo at the message receiving endpoint. The
&gt; &gt; bean where the call is made, the method where it is located, the
&gt; parameters
&gt; &gt; used, and then the method is called by reflection.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Interface Design/Change
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &amp;nbsp; &amp;nbsp; method name
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &amp;nbsp; &amp;nbsp; parameter list
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &amp;nbsp; &amp;nbsp; return value
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; &amp;nbsp;Compatibility, Deprecation, and Migration Plan
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken into
&gt; &gt; consideration?
&gt; &gt;
&gt; &gt; Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
&gt; &gt;
&gt; &gt; Upgrade normally, no additional migration required.
&gt; &gt;
&gt; &gt; Implementation Outline
&gt; &gt;
&gt; &gt; We will implement the proposed changes by 1 phase. (QSF is implemented
&gt; and
&gt; &gt; works well in our project)
&gt; &gt;
&gt; &gt; Phase 1
&gt; &gt;
&gt; &gt;
&gt; &gt; Complete the QSF mq client encapsulation.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Complete the QSF idempotency support
&gt; &gt;
&gt; &gt;
&gt; &gt; Rejected Alternatives
&gt; &gt;
&gt; &gt; There are no other alternatives.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; &gt; 发件人:
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; "Jason.Chen"
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <
&gt; &gt; chenhuanzu@foxmail.com&amp;gt;;
&gt; &gt; 发送时间:&amp;nbsp;2022年3月16日(星期三) 中午12:55
&gt; &gt; 收件人:&amp;nbsp;"dev"<dev@rocketmq.apache.org&amp;gt;;
&gt; &gt;
&gt; &gt; 主题:&amp;nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Status
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Current State: Proposed
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Authors: booom( booom (jason) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Mailing List discussion:
&gt; &gt; dev@rocketmq.apache.org
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Pull Request:
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Released: <relased_version&amp;gt;
&gt; &gt;
&gt; &gt; Background &amp;amp; Motivation
&gt; &gt;
&gt; &gt; What do we need to do
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add a new module? Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add new APIs? No.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add new feature? Yes.
&gt; &gt;
&gt; &gt; Why should we do that
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there any problems of our current project?
&gt; &gt;
&gt; &gt; The current mq client API is intrusive, to send message or consume
&gt; &gt; message, we should code to manage the mq infrastructure, and mixed it up
&gt; &gt; with our business logic codes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What can we benefit proposed changes?
&gt; &gt;
&gt; &gt; 1.&amp;nbsp;&amp;nbsp; &amp;nbsp; Encapsulate mq client API to support method
&gt; invoking
&gt; &gt; style usage.
&gt; &gt;
&gt; &gt; 2.&amp;nbsp;&amp;nbsp; &amp;nbsp; The encapsulation is easily extensible, to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; 3.&amp;nbsp;&amp;nbsp; &amp;nbsp; Isolate the mq client manage code and the business
&gt; &gt; logic code, to help mq users improve their systems’ maintainability.
&gt; &gt;
&gt; &gt; &amp;nbsp;
&gt; &gt;
&gt; &gt; Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What problem is this proposal designed to
&gt; solve?
&gt; &gt;
&gt; &gt; Unobtrusive mq client usage, and easily extensible to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; To what degree should we solve the problem?
&gt; &gt;
&gt; &gt; 100%.
&gt; &gt;
&gt; &gt; Non-Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What problem is this proposal NOT designed to
&gt; &gt; solve?
&gt; &gt;
&gt; &gt; 1.&amp;nbsp;&amp;nbsp; &amp;nbsp; Add new features to classics mq client.
&gt; &gt;
&gt; &gt; 2.&amp;nbsp;&amp;nbsp; &amp;nbsp; Affect compatibility.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there any limits of this proposal?
&gt; &gt;
&gt; &gt; Only QSF(queue service framework) users will benefit.
&gt; &gt;
&gt; &gt; Changes
&gt; &gt;
&gt; &gt; Architecture
&gt; &gt;
&gt; &gt; Interface Design/Change
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Method signature changes
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; method name
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parameter list
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return value
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Method behavior changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; CLI command changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Log format or content changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; &amp;nbsp;Compatibility, Deprecation, and Migration Plan
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are backward and forward compatibility taken
&gt; &gt; into consideration?
&gt; &gt;
&gt; &gt; Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there deprecated APIs?
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; How do we do migration?
&gt; &gt;
&gt; &gt; Upgrade normally, no additional migration required.
&gt; &gt;
&gt; &gt; Implementation Outline
&gt; &gt;
&gt; &gt; We will implement the proposed changes by 1 phase. (QSF is implemented
&gt; and
&gt; &gt; works well in our project)
&gt; &gt;
&gt; &gt; Phase 1
&gt; &gt;
&gt; &gt; Complete&nbsp;&nbsp;&nbsp; &nbsp; the QSF mq client encapsulation.
&gt; &gt;
&gt; &gt; Complete&nbsp;&nbsp;&nbsp; &nbsp; the QSF idempotency support
&gt; &gt;
&gt; &gt; Rejected Alternatives
&gt; &gt;
&gt; &gt; There are no other alternatives.
&gt;

回复: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
QSF is so convenient, let's take a look at a demo of using QSF to send and receive messages:

//receive message
@QSFProvider(consumerId = "rocketmq_consumer_qsf_demo", topic = "rocketmq_topic_qsf_demo")
@Slf4j
public class QSFDemoServiceImpl implements QSFDemoService {
    @Override
    public void testQSFBasic(long id, String name) {
        log.info("in service call: syncVoid id:{} name:{}", id, name);
    }
    
    @Override
    public void testQSFIdempotency(long id, String name) {
        log.info("in service call: asyncEcho id:{} name:{}", id, name);
    }
}
//send message
@RestController
@RequestMapping("/demo")
@Slf4j
public class TestController {

    @QSFConsumer(topic = "rocketmq_topic_qsf_demo", methodSpecials = {
        @QSFConsumer.ConsumerMethodSpecial(methodName = "asyncEcho", idempotent = true)
    })
    private QSFDemoService qsfDemoService;

    @GetMapping(("/qsf"))
    public Map<String, String&gt; qsf(HttpServletRequest request) {
        Map<String, String&gt; resultMap = new HashMap<&gt;();

        // test QSF basic usage
        qsfDemoService.testQSFBasic(100L, "hello world");

        // test QSF idempotency, method with same parameters will be invoked exactly once
        qsfDemoService.testQSFIdempotency(100L, "hello world");
        qsfDemoService.testQSFIdempotency(100L, "hello world");

        return resultMap;
    }
}



QSF API is non-intrusive, requires minimal information provided by users, and minimizes the chance of making mistakes. It is as convenient to use as method calls, with low development and testing costs, and with QSF&nbsp;team communication is simpler.






————————— 原始邮件 —————————
发件人:                                                                                                                        “Jason.Chen”                                                                                    chenhuanzu@foxmail.com;
发送时间: 2022年3月16日(星期三) 晚上9:39
收件人: “dev”dev@rocketmq.apache.org;
主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
 
Thanks Reply:)
 
QSF is a step further than rocketmq-spring. Using QSF, users can get the most intuitive experience that is almost identical to that of local method calls; moreover, QSF reserves a good extension capability, which can easily provide features such as idempotent, eventual consistency and flow control and so on.
 
For a simple usage example of QSF, please see the discussion above :)
 
————————— 原始邮件 —————————
发件人:                                                                                                                        “dev”                                                                                    duhengforever@apache.org;
发送时间: 2022年3月16日(星期三) 晚上8:44
收件人: “dev”dev@rocketmq.apache.org;
主题: Re: [DISCUSS] RIP-35 queue service framework(QSF)
 
Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?
 
[1]https://github.com/apache/rocketmq-spring
 
yukon yukon@apache.org 于2022年3月16日周三 20:23写道:
  
Could you please provide some demos to show how we use
QSFProducer/Consumer?
 
On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen chenhuanzu@foxmail.com wrote:
  
I am sorry that the RIP mail format is incorrect, and i write a
well-formed google doc version here:
 
https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
 
RIP 35 queue service framework(QSF)
 
Status
 
●&nbsp;         Current State: Proposed
 
●&nbsp;         Authors: booom( booom (jason) · GitHub)
 
●&nbsp;         Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;         Mailing List discussion: dev@rocketmq.apache.org
 
●&nbsp;         Pull Request:
 
●&nbsp;         Released:&nbsp;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;         Will we add a new module? Yes.
 
●&nbsp;         Will we add new APIs? No.
 
●&nbsp;         Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;         Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp;         What can we benefit proposed changes?
  

Encapsulate mq client API to support method invoking style usage.
 
 

The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
 

Isolate the mq client manage code and the business logic code, to
help mq users improve their systems’ maintainability.
 
  
Goals
 
●&nbsp;         What problem is this proposal designed to solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;         To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;         What problem is this proposal NOT designed to solve?
  

Add new features to classics mq client.
 
 

Affect compatibility.
 
  
●&nbsp;         Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
To simplify a process, we need to consider what information is essential
and must be provided by users to execute this process? How to properly
organize this information so that it is most user-friendly?&nbsp;
 
Along this thinking path, we have extracted the necessary parameters for
mq calls and organized them into the java annotations @QSFConsumer and
@QSFProvider. After that, through the extension support of spring
container
in each stage of bean life cycle, we can process @QSFConsumer
@QSFProvider
annotation in BeanPostProcessor, extract method invocation information to
method invocation information object MethodInvokeInfo and send it out,
and
locate it through MethodInvokeInfo at the message receiving endpoint. The
bean where the call is made, the method where it is located, the
parameters
used, and then the method is called by reflection.
 
Interface Design/Change
 
●&nbsp;         Method signature changes
 
○&nbsp;         &nbsp; &nbsp; method name
 
○&nbsp;         &nbsp; &nbsp; parameter list
 
○&nbsp;         &nbsp; &nbsp; return value
 
Nothing.
 
●&nbsp;         Method behavior changes
 
Nothing.
 
●&nbsp;         CLI command changes
 
Nothing.
 
●&nbsp;         Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;         Are backward and forward compatibility taken into
consideration?
 
Yes.
 
●&nbsp;         Are there deprecated APIs?
 
Nothing.
 
●&nbsp;         How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete the QSF mq client encapsulation.
 
Complete the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
 
—————————&nbsp;原始邮件&nbsp;—————————
发件人:
                                                  “Jason.Chen”
                                                                      <
chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 中午12:55
收件人:&nbsp;”dev”<dev@rocketmq.apache.org&gt;;
 
主题:&nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
 
Status
 
●&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
 
●&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion:
dev@rocketmq.apache.org
 
●&nbsp;&nbsp;&nbsp; &nbsp; Pull Request:
 
●&nbsp;&nbsp;&nbsp; &nbsp; Released: <relased_version&gt;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume
message, we should code to manage the mq infrastructure, and mixed it up
with our business logic codes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
 
1.&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method
invoking
style usage.
 
2.&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
3.&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business
logic code, to help mq users improve their systems’ maintainability.
 
&nbsp;
 
Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to
solve?
 
Unobtrusive mq client usage, and easily extensible to support
idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to
solve?
 
1.&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
 
2.&nbsp;&nbsp; &nbsp; Affect compatibility.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
Interface Design/Change
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; method name
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; parameter list
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return value
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken
into consideration?
 
Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented
and
works well in our project)
 
Phase 1
 
Complete      the QSF mq client encapsulation.
 
Complete      the QSF idempotency support
 
Rejected Alternatives
 
There are no other alternatives.
   ​

回复: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
Thanks Reply:)


QSF is a step further than rocketmq-spring. Using QSF, users can get the most intuitive experience that is almost identical to that of local method calls; moreover, QSF reserves a good extension capability, which can easily provide features such as&nbsp;idempotent,&nbsp;eventual consistency and flow control and so on.


For a simple usage example of QSF, please see the discussion above :)





------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "dev"                                                                                    <duhengforever@apache.org&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 晚上8:44
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;Re: [DISCUSS] RIP-35 queue service framework(QSF)



Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?

[1]https://github.com/apache/rocketmq-spring

yukon <yukon@apache.org&gt; 于2022年3月16日周三 20:23写道:

&gt; Could you please provide some demos to show how we use
&gt; QSFProducer/Consumer?
&gt;
&gt; On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen <chenhuanzu@foxmail.com&gt; wrote:
&gt;
&gt; &gt; I am sorry that the RIP mail format is incorrect, and i write a
&gt; &gt; well-formed google doc version here:
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; RIP 35 queue service framework(QSF)
&gt; &gt;
&gt; &gt; Status
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current State: Proposed
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Authors: booom( booom (jason) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mailing List discussion: dev@rocketmq.apache.org
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pull Request:
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Released:&amp;nbsp;
&gt; &gt;
&gt; &gt; Background &amp;amp; Motivation
&gt; &gt;
&gt; &gt; What do we need to do
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add a new module? Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add new APIs? No.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Will we add new feature? Yes.
&gt; &gt;
&gt; &gt; Why should we do that
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there any problems of our current project?
&gt; &gt;
&gt; &gt; The current mq client API is intrusive, to send message or consume
&gt; &gt; message, we should code to manage the mq infrastructure, and mixed it up
&gt; &gt; with our business logic codes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What can we benefit proposed changes?
&gt; &gt;
&gt; &gt; 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Encapsulate mq client API to support method invoking style usage.
&gt; &gt;
&gt; &gt; 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The encapsulation is easily extensible, to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; 3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Isolate the mq client manage code and the business logic code, to
&gt; &gt; help mq users improve their systems’ maintainability.
&gt; &gt;
&gt; &gt; Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What problem is this proposal designed to solve?
&gt; &gt;
&gt; &gt; Unobtrusive mq client usage, and easily extensible to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To what degree should we solve the problem?
&gt; &gt;
&gt; &gt; 100%.
&gt; &gt;
&gt; &gt; Non-Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; What problem is this proposal NOT designed to solve?
&gt; &gt;
&gt; &gt; 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Add new features to classics mq client.
&gt; &gt;
&gt; &gt; 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Affect compatibility.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there any limits of this proposal?
&gt; &gt;
&gt; &gt; Only QSF(queue service framework) users will benefit.
&gt; &gt;
&gt; &gt; Changes
&gt; &gt;
&gt; &gt; Architecture
&gt; &gt;
&gt; &gt; To simplify a process, we need to consider what information is essential
&gt; &gt; and must be provided by users to execute this process? How to properly
&gt; &gt; organize this information so that it is most user-friendly?&amp;nbsp;
&gt; &gt;
&gt; &gt;
&gt; &gt; Along this thinking path, we have extracted the necessary parameters for
&gt; &gt; mq calls and organized them into the java annotations @QSFConsumer and
&gt; &gt; @QSFProvider. After that, through the extension support of spring
&gt; container
&gt; &gt; in each stage of bean life cycle, we can process @QSFConsumer
&gt; @QSFProvider
&gt; &gt; annotation in BeanPostProcessor, extract method invocation information to
&gt; &gt; method invocation information object MethodInvokeInfo and send it out,
&gt; and
&gt; &gt; locate it through MethodInvokeInfo at the message receiving endpoint. The
&gt; &gt; bean where the call is made, the method where it is located, the
&gt; parameters
&gt; &gt; used, and then the method is called by reflection.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Interface Design/Change
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method signature changes
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp; method name
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp; parameter list
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp; return value
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method behavior changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLI command changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log format or content changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; &amp;nbsp;Compatibility, Deprecation, and Migration Plan
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are backward and forward compatibility taken into
&gt; &gt; consideration?
&gt; &gt;
&gt; &gt; Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Are there deprecated APIs?
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; How do we do migration?
&gt; &gt;
&gt; &gt; Upgrade normally, no additional migration required.
&gt; &gt;
&gt; &gt; Implementation Outline
&gt; &gt;
&gt; &gt; We will implement the proposed changes by 1 phase. (QSF is implemented
&gt; and
&gt; &gt; works well in our project)
&gt; &gt;
&gt; &gt; Phase 1
&gt; &gt;
&gt; &gt;
&gt; &gt; Complete the QSF mq client encapsulation.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Complete the QSF idempotency support
&gt; &gt;
&gt; &gt;
&gt; &gt; Rejected Alternatives
&gt; &gt;
&gt; &gt; There are no other alternatives.
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; &gt; 发件人:
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Jason.Chen"
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <
&gt; &gt; chenhuanzu@foxmail.com&amp;gt;;
&gt; &gt; 发送时间:&amp;nbsp;2022年3月16日(星期三) 中午12:55
&gt; &gt; 收件人:&amp;nbsp;"dev"<dev@rocketmq.apache.org&amp;gt;;
&gt; &gt;
&gt; &gt; 主题:&amp;nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt;
&gt; &gt; Status
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Current State: Proposed
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Authors: booom( booom (jason) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Mailing List discussion:
&gt; &gt; dev@rocketmq.apache.org
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Pull Request:
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Released: <relased_version&amp;gt;
&gt; &gt;
&gt; &gt; Background &amp;amp; Motivation
&gt; &gt;
&gt; &gt; What do we need to do
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add a new module? Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add new APIs? No.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Will we add new feature? Yes.
&gt; &gt;
&gt; &gt; Why should we do that
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there any problems of our current project?
&gt; &gt;
&gt; &gt; The current mq client API is intrusive, to send message or consume
&gt; &gt; message, we should code to manage the mq infrastructure, and mixed it up
&gt; &gt; with our business logic codes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What can we benefit proposed changes?
&gt; &gt;
&gt; &gt; 1.&amp;nbsp;&amp;nbsp; &amp;nbsp; Encapsulate mq client API to support method
&gt; invoking
&gt; &gt; style usage.
&gt; &gt;
&gt; &gt; 2.&amp;nbsp;&amp;nbsp; &amp;nbsp; The encapsulation is easily extensible, to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; 3.&amp;nbsp;&amp;nbsp; &amp;nbsp; Isolate the mq client manage code and the business
&gt; &gt; logic code, to help mq users improve their systems’ maintainability.
&gt; &gt;
&gt; &gt; &amp;nbsp;
&gt; &gt;
&gt; &gt; Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What problem is this proposal designed to
&gt; solve?
&gt; &gt;
&gt; &gt; Unobtrusive mq client usage, and easily extensible to support
&gt; &gt; idempotence/eventually consistent/ fluid control extensions and so on.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; To what degree should we solve the problem?
&gt; &gt;
&gt; &gt; 100%.
&gt; &gt;
&gt; &gt; Non-Goals
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; What problem is this proposal NOT designed to
&gt; &gt; solve?
&gt; &gt;
&gt; &gt; 1.&amp;nbsp;&amp;nbsp; &amp;nbsp; Add new features to classics mq client.
&gt; &gt;
&gt; &gt; 2.&amp;nbsp;&amp;nbsp; &amp;nbsp; Affect compatibility.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there any limits of this proposal?
&gt; &gt;
&gt; &gt; Only QSF(queue service framework) users will benefit.
&gt; &gt;
&gt; &gt; Changes
&gt; &gt;
&gt; &gt; Architecture
&gt; &gt;
&gt; &gt; Interface Design/Change
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Method signature changes
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; method name
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; parameter list
&gt; &gt;
&gt; &gt; ○&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return value
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Method behavior changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; CLI command changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Log format or content changes
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; &amp;nbsp;Compatibility, Deprecation, and Migration Plan
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are backward and forward compatibility taken
&gt; &gt; into consideration?
&gt; &gt;
&gt; &gt; Yes.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Are there deprecated APIs?
&gt; &gt;
&gt; &gt; Nothing.
&gt; &gt;
&gt; &gt; ●&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; How do we do migration?
&gt; &gt;
&gt; &gt; Upgrade normally, no additional migration required.
&gt; &gt;
&gt; &gt; Implementation Outline
&gt; &gt;
&gt; &gt; We will implement the proposed changes by 1 phase. (QSF is implemented
&gt; and
&gt; &gt; works well in our project)
&gt; &gt;
&gt; &gt; Phase 1
&gt; &gt;
&gt; &gt; Complete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the QSF mq client encapsulation.
&gt; &gt;
&gt; &gt; Complete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the QSF idempotency support
&gt; &gt;
&gt; &gt; Rejected Alternatives
&gt; &gt;
&gt; &gt; There are no other alternatives.
&gt;

Re: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by heng du <du...@apache.org>.
Nice to see this proposal of yours, but it seems a bit like what
rocketmq-spring[1] does, so can you elaborate on the difference between QSF
and rocketmq-spring?

[1]https://github.com/apache/rocketmq-spring

yukon <yu...@apache.org> 于2022年3月16日周三 20:23写道:

> Could you please provide some demos to show how we use
> QSFProducer/Consumer?
>
> On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen <ch...@foxmail.com> wrote:
>
> > I am sorry that the RIP mail format is incorrect, and i write a
> > well-formed google doc version here:
> >
> >
> >
> https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
> >
> >
> >
> >
> >
> >
> > RIP 35 queue service framework(QSF)
> >
> > Status
> >
> > ●&nbsp;         Current State: Proposed
> >
> > ●&nbsp;         Authors: booom( booom (jason) · GitHub)
> >
> > ●&nbsp;         Shepherds: yukon( zhouxinyu (yukon) · GitHub)
> >
> > ●&nbsp;         Mailing List discussion: dev@rocketmq.apache.org
> >
> > ●&nbsp;         Pull Request:
> >
> > ●&nbsp;         Released:&nbsp;
> >
> > Background &amp; Motivation
> >
> > What do we need to do
> >
> > ●&nbsp;         Will we add a new module? Yes.
> >
> > ●&nbsp;         Will we add new APIs? No.
> >
> > ●&nbsp;         Will we add new feature? Yes.
> >
> > Why should we do that
> >
> > ●&nbsp;         Are there any problems of our current project?
> >
> > The current mq client API is intrusive, to send message or consume
> > message, we should code to manage the mq infrastructure, and mixed it up
> > with our business logic codes.
> >
> > ●&nbsp;         What can we benefit proposed changes?
> >
> > 1.      Encapsulate mq client API to support method invoking style usage.
> >
> > 2.      The encapsulation is easily extensible, to support
> > idempotence/eventually consistent/ fluid control extensions and so on.
> >
> > 3.      Isolate the mq client manage code and the business logic code, to
> > help mq users improve their systems’ maintainability.
> >
> > Goals
> >
> > ●&nbsp;         What problem is this proposal designed to solve?
> >
> > Unobtrusive mq client usage, and easily extensible to support
> > idempotence/eventually consistent/ fluid control extensions and so on.
> >
> > ●&nbsp;         To what degree should we solve the problem?
> >
> > 100%.
> >
> > Non-Goals
> >
> > ●&nbsp;         What problem is this proposal NOT designed to solve?
> >
> > 1.      Add new features to classics mq client.
> >
> > 2.      Affect compatibility.
> >
> > ●&nbsp;         Are there any limits of this proposal?
> >
> > Only QSF(queue service framework) users will benefit.
> >
> > Changes
> >
> > Architecture
> >
> > To simplify a process, we need to consider what information is essential
> > and must be provided by users to execute this process? How to properly
> > organize this information so that it is most user-friendly?&nbsp;
> >
> >
> > Along this thinking path, we have extracted the necessary parameters for
> > mq calls and organized them into the java annotations @QSFConsumer and
> > @QSFProvider. After that, through the extension support of spring
> container
> > in each stage of bean life cycle, we can process @QSFConsumer
> @QSFProvider
> > annotation in BeanPostProcessor, extract method invocation information to
> > method invocation information object MethodInvokeInfo and send it out,
> and
> > locate it through MethodInvokeInfo at the message receiving endpoint. The
> > bean where the call is made, the method where it is located, the
> parameters
> > used, and then the method is called by reflection.
> >
> >
> >
> >
> >
> > Interface Design/Change
> >
> > ●&nbsp;         Method signature changes
> >
> > ○&nbsp;         &nbsp; &nbsp; method name
> >
> > ○&nbsp;         &nbsp; &nbsp; parameter list
> >
> > ○&nbsp;         &nbsp; &nbsp; return value
> >
> > Nothing.
> >
> > ●&nbsp;         Method behavior changes
> >
> > Nothing.
> >
> > ●&nbsp;         CLI command changes
> >
> > Nothing.
> >
> > ●&nbsp;         Log format or content changes
> >
> > Nothing.
> >
> > &nbsp;Compatibility, Deprecation, and Migration Plan
> >
> > ●&nbsp;         Are backward and forward compatibility taken into
> > consideration?
> >
> > Yes.
> >
> > ●&nbsp;         Are there deprecated APIs?
> >
> > Nothing.
> >
> > ●&nbsp;         How do we do migration?
> >
> > Upgrade normally, no additional migration required.
> >
> > Implementation Outline
> >
> > We will implement the proposed changes by 1 phase. (QSF is implemented
> and
> > works well in our project)
> >
> > Phase 1
> >
> >
> > Complete the QSF mq client encapsulation.
> >
> >
> >
> > Complete the QSF idempotency support
> >
> >
> > Rejected Alternatives
> >
> > There are no other alternatives.
> >
> >
> >
> >
> >
> >
> >
> > ------------------&nbsp;原始邮件&nbsp;------------------
> > 发件人:
> >                                                   "Jason.Chen"
> >                                                                       <
> > chenhuanzu@foxmail.com&gt;;
> > 发送时间:&nbsp;2022年3月16日(星期三) 中午12:55
> > 收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;
> >
> > 主题:&nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
> >
> >
> >
> >
> >
> >
> >
> > Status
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion:
> > dev@rocketmq.apache.org
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Pull Request:
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Released: <relased_version&gt;
> >
> > Background &amp; Motivation
> >
> > What do we need to do
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
> >
> > Why should we do that
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
> >
> > The current mq client API is intrusive, to send message or consume
> > message, we should code to manage the mq infrastructure, and mixed it up
> > with our business logic codes.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
> >
> > 1.&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method
> invoking
> > style usage.
> >
> > 2.&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support
> > idempotence/eventually consistent/ fluid control extensions and so on.
> >
> > 3.&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business
> > logic code, to help mq users improve their systems’ maintainability.
> >
> > &nbsp;
> >
> > Goals
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to
> solve?
> >
> > Unobtrusive mq client usage, and easily extensible to support
> > idempotence/eventually consistent/ fluid control extensions and so on.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
> >
> > 100%.
> >
> > Non-Goals
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to
> > solve?
> >
> > 1.&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
> >
> > 2.&nbsp;&nbsp; &nbsp; Affect compatibility.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
> >
> > Only QSF(queue service framework) users will benefit.
> >
> > Changes
> >
> > Architecture
> >
> > Interface Design/Change
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
> >
> > ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; method name
> >
> > ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; parameter list
> >
> > ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return value
> >
> > Nothing.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
> >
> > Nothing.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
> >
> > Nothing.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
> >
> > Nothing.
> >
> > &nbsp;Compatibility, Deprecation, and Migration Plan
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken
> > into consideration?
> >
> > Yes.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
> >
> > Nothing.
> >
> > ●&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
> >
> > Upgrade normally, no additional migration required.
> >
> > Implementation Outline
> >
> > We will implement the proposed changes by 1 phase. (QSF is implemented
> and
> > works well in our project)
> >
> > Phase 1
> >
> > Complete      the QSF mq client encapsulation.
> >
> > Complete      the QSF idempotency support
> >
> > Rejected Alternatives
> >
> > There are no other alternatives.
>

Re: [DISCUSS] RIP-35 queue service framework(QSF)

Posted by yukon <yu...@apache.org>.
Could you please provide some demos to show how we use QSFProducer/Consumer?

On Wed, Mar 16, 2022 at 6:49 PM Jason.Chen <ch...@foxmail.com> wrote:

> I am sorry that the RIP mail format is incorrect, and i write a
> well-formed google doc version here:
>
>
> https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg
>
>
>
>
>
>
> RIP 35 queue service framework(QSF)
>
> Status
>
> ●&nbsp;         Current State: Proposed
>
> ●&nbsp;         Authors: booom( booom (jason) · GitHub)
>
> ●&nbsp;         Shepherds: yukon( zhouxinyu (yukon) · GitHub)
>
> ●&nbsp;         Mailing List discussion: dev@rocketmq.apache.org
>
> ●&nbsp;         Pull Request:
>
> ●&nbsp;         Released:&nbsp;
>
> Background &amp; Motivation
>
> What do we need to do
>
> ●&nbsp;         Will we add a new module? Yes.
>
> ●&nbsp;         Will we add new APIs? No.
>
> ●&nbsp;         Will we add new feature? Yes.
>
> Why should we do that
>
> ●&nbsp;         Are there any problems of our current project?
>
> The current mq client API is intrusive, to send message or consume
> message, we should code to manage the mq infrastructure, and mixed it up
> with our business logic codes.
>
> ●&nbsp;         What can we benefit proposed changes?
>
> 1.      Encapsulate mq client API to support method invoking style usage.
>
> 2.      The encapsulation is easily extensible, to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> 3.      Isolate the mq client manage code and the business logic code, to
> help mq users improve their systems’ maintainability.
>
> Goals
>
> ●&nbsp;         What problem is this proposal designed to solve?
>
> Unobtrusive mq client usage, and easily extensible to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> ●&nbsp;         To what degree should we solve the problem?
>
> 100%.
>
> Non-Goals
>
> ●&nbsp;         What problem is this proposal NOT designed to solve?
>
> 1.      Add new features to classics mq client.
>
> 2.      Affect compatibility.
>
> ●&nbsp;         Are there any limits of this proposal?
>
> Only QSF(queue service framework) users will benefit.
>
> Changes
>
> Architecture
>
> To simplify a process, we need to consider what information is essential
> and must be provided by users to execute this process? How to properly
> organize this information so that it is most user-friendly?&nbsp;
>
>
> Along this thinking path, we have extracted the necessary parameters for
> mq calls and organized them into the java annotations @QSFConsumer and
> @QSFProvider. After that, through the extension support of spring container
> in each stage of bean life cycle, we can process @QSFConsumer @QSFProvider
> annotation in BeanPostProcessor, extract method invocation information to
> method invocation information object MethodInvokeInfo and send it out, and
> locate it through MethodInvokeInfo at the message receiving endpoint. The
> bean where the call is made, the method where it is located, the parameters
> used, and then the method is called by reflection.
>
>
>
>
>
> Interface Design/Change
>
> ●&nbsp;         Method signature changes
>
> ○&nbsp;         &nbsp; &nbsp; method name
>
> ○&nbsp;         &nbsp; &nbsp; parameter list
>
> ○&nbsp;         &nbsp; &nbsp; return value
>
> Nothing.
>
> ●&nbsp;         Method behavior changes
>
> Nothing.
>
> ●&nbsp;         CLI command changes
>
> Nothing.
>
> ●&nbsp;         Log format or content changes
>
> Nothing.
>
> &nbsp;Compatibility, Deprecation, and Migration Plan
>
> ●&nbsp;         Are backward and forward compatibility taken into
> consideration?
>
> Yes.
>
> ●&nbsp;         Are there deprecated APIs?
>
> Nothing.
>
> ●&nbsp;         How do we do migration?
>
> Upgrade normally, no additional migration required.
>
> Implementation Outline
>
> We will implement the proposed changes by 1 phase. (QSF is implemented and
> works well in our project)
>
> Phase 1
>
>
> Complete the QSF mq client encapsulation.
>
>
>
> Complete the QSF idempotency support
>
>
> Rejected Alternatives
>
> There are no other alternatives.
>
>
>
>
>
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:
>                                                   "Jason.Chen"
>                                                                       <
> chenhuanzu@foxmail.com&gt;;
> 发送时间:&nbsp;2022年3月16日(星期三) 中午12:55
> 收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;
>
> 主题:&nbsp;[DISCUSS] RIP-35 queue service framework(QSF)
>
>
>
>
>
>
>
> Status
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion:
> dev@rocketmq.apache.org
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Pull Request:
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Released: <relased_version&gt;
>
> Background &amp; Motivation
>
> What do we need to do
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
>
> Why should we do that
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
>
> The current mq client API is intrusive, to send message or consume
> message, we should code to manage the mq infrastructure, and mixed it up
> with our business logic codes.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
>
> 1.&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method invoking
> style usage.
>
> 2.&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> 3.&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business
> logic code, to help mq users improve their systems’ maintainability.
>
> &nbsp;
>
> Goals
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to solve?
>
> Unobtrusive mq client usage, and easily extensible to support
> idempotence/eventually consistent/ fluid control extensions and so on.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
>
> 100%.
>
> Non-Goals
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to
> solve?
>
> 1.&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
>
> 2.&nbsp;&nbsp; &nbsp; Affect compatibility.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
>
> Only QSF(queue service framework) users will benefit.
>
> Changes
>
> Architecture
>
> Interface Design/Change
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
>
> ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; method name
>
> ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; parameter list
>
> ○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return value
>
> Nothing.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
>
> Nothing.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
>
> Nothing.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
>
> Nothing.
>
> &nbsp;Compatibility, Deprecation, and Migration Plan
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken
> into consideration?
>
> Yes.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
>
> Nothing.
>
> ●&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
>
> Upgrade normally, no additional migration required.
>
> Implementation Outline
>
> We will implement the proposed changes by 1 phase. (QSF is implemented and
> works well in our project)
>
> Phase 1
>
> Complete      the QSF mq client encapsulation.
>
> Complete      the QSF idempotency support
>
> Rejected Alternatives
>
> There are no other alternatives.

回复:[DISCUSS] RIP-35 queue service framework(QSF)

Posted by "Jason.Chen" <ch...@foxmail.com>.
I am sorry that the RIP mail format is incorrect, and i write a well-formed google doc version here:

https://docs.google.com/document/d/10wSe24TAls7J9y0Ql4MYo73FX8g1aX9guoxBxzQhJgg

 




RIP 35 queue service framework(QSF)

Status

●&nbsp; 	Current State: Proposed

●&nbsp; 	Authors: booom( booom (jason) · GitHub)

●&nbsp; 	Shepherds: yukon( zhouxinyu (yukon) · GitHub)

●&nbsp; 	Mailing List discussion: dev@rocketmq.apache.org

●&nbsp; 	Pull Request:

●&nbsp; 	Released:&nbsp;

Background &amp; Motivation

What do we need to do

●&nbsp; 	Will we add a new module? Yes.

●&nbsp; 	Will we add new APIs? No.

●&nbsp; 	Will we add new feature? Yes.

Why should we do that

●&nbsp; 	Are there any problems of our current project?

The current mq client API is intrusive, to send message or consume message, we should code to manage the mq infrastructure, and mixed it up with our business logic codes.

●&nbsp; 	What can we benefit proposed changes?

1. 	Encapsulate mq client API to support method invoking style usage.

2. 	The encapsulation is easily extensible, to support idempotence/eventually consistent/ fluid control extensions and so on.

3. 	Isolate the mq client manage code and the business logic code, to help mq users improve their systems’ maintainability.

Goals

●&nbsp; 	What problem is this proposal designed to solve?

Unobtrusive mq client usage, and easily extensible to support idempotence/eventually consistent/ fluid control extensions and so on.

●&nbsp; 	To what degree should we solve the problem?

100%.

Non-Goals

●&nbsp; 	What problem is this proposal NOT designed to solve?

1. 	Add new features to classics mq client.

2. 	Affect compatibility.

●&nbsp; 	Are there any limits of this proposal?

Only QSF(queue service framework) users will benefit.

Changes

Architecture

To simplify a process, we need to consider what information is essential and must be provided by users to execute this process? How to properly organize this information so that it is most user-friendly?&nbsp;


Along this thinking path, we have extracted the necessary parameters for mq calls and organized them into the java annotations @QSFConsumer and @QSFProvider. After that, through the extension support of spring container in each stage of bean life cycle, we can process @QSFConsumer @QSFProvider annotation in BeanPostProcessor, extract method invocation information to method invocation information object MethodInvokeInfo and send it out, and locate it through MethodInvokeInfo at the message receiving endpoint. The bean where the call is made, the method where it is located, the parameters used, and then the method is called by reflection.





Interface Design/Change

●&nbsp; 	Method signature changes

○&nbsp; 	&nbsp; &nbsp; method name

○&nbsp; 	&nbsp; &nbsp; parameter list

○&nbsp; 	&nbsp; &nbsp; return value

Nothing.

●&nbsp; 	Method behavior changes

Nothing.

●&nbsp; 	CLI command changes

Nothing.

●&nbsp; 	Log format or content changes

Nothing.

&nbsp;Compatibility, Deprecation, and Migration Plan

●&nbsp; 	Are backward and forward compatibility taken into consideration?

Yes.

●&nbsp; 	Are there deprecated APIs?

Nothing.

●&nbsp; 	How do we do migration?

Upgrade normally, no additional migration required.

Implementation Outline

We will implement the proposed changes by 1 phase. (QSF is implemented and works well in our project)

Phase 1


Complete the QSF mq client encapsulation.



Complete the QSF idempotency support


Rejected Alternatives

There are no other alternatives.







------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "Jason.Chen"                                                                                    <chenhuanzu@foxmail.com&gt;;
发送时间:&nbsp;2022年3月16日(星期三) 中午12:55
收件人:&nbsp;"dev"<dev@rocketmq.apache.org&gt;;

主题:&nbsp;[DISCUSS] RIP-35 queue service framework(QSF)






 
Status
 
●&nbsp;&nbsp;&nbsp; &nbsp; Current State: Proposed
 
●&nbsp;&nbsp;&nbsp; &nbsp; Authors: booom( booom (jason) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Shepherds: yukon( zhouxinyu (yukon) · GitHub)
 
●&nbsp;&nbsp;&nbsp; &nbsp; Mailing List discussion: dev@rocketmq.apache.org
 
●&nbsp;&nbsp;&nbsp; &nbsp; Pull Request: 
 
●&nbsp;&nbsp;&nbsp; &nbsp; Released: <relased_version&gt;
 
Background &amp; Motivation
 
What do we need to do
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add a new module? Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new APIs? No.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Will we add new feature? Yes.
 
Why should we do that
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any problems of our current project?
 
The current mq client API is intrusive, to send message or consume message, we should code to manage the mq infrastructure, and mixed it up with our business logic codes. 
 
●&nbsp;&nbsp;&nbsp; &nbsp; What can we benefit proposed changes?
 
1.&nbsp;&nbsp; &nbsp; Encapsulate mq client API to support method invoking style usage.
 
2.&nbsp;&nbsp; &nbsp; The encapsulation is easily extensible, to support idempotence/eventually consistent/ fluid control extensions and so on.
 
3.&nbsp;&nbsp; &nbsp; Isolate the mq client manage code and the business logic code, to help mq users improve their systems’ maintainability.
 
&nbsp;
 
Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal designed to solve?
 
Unobtrusive mq client usage, and easily extensible to support idempotence/eventually consistent/ fluid control extensions and so on.
 
●&nbsp;&nbsp;&nbsp; &nbsp; To what degree should we solve the problem?
 
100%.
 
Non-Goals
 
●&nbsp;&nbsp;&nbsp; &nbsp; What problem is this proposal NOT designed to solve?
 
1.&nbsp;&nbsp; &nbsp; Add new features to classics mq client.
 
2.&nbsp;&nbsp; &nbsp; Affect compatibility.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there any limits of this proposal?
 
Only QSF(queue service framework) users will benefit.
 
Changes
 
Architecture
 
Interface Design/Change
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method signature changes
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; method name
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; parameter list
 
○&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return value
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Method behavior changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; CLI command changes
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Log format or content changes
 
Nothing.
 
&nbsp;Compatibility, Deprecation, and Migration Plan
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are backward and forward compatibility taken into consideration?
 
Yes.
 
●&nbsp;&nbsp;&nbsp; &nbsp; Are there deprecated APIs?
 
Nothing.
 
●&nbsp;&nbsp;&nbsp; &nbsp; How do we do migration?
 
Upgrade normally, no additional migration required.
 
Implementation Outline
 
We will implement the proposed changes by 1 phase. (QSF is implemented and works well in our project)
 
Phase 1
   
Complete      the QSF mq client encapsulation.
  
Complete      the QSF idempotency support
  
Rejected Alternatives 
 
There are no other alternatives.