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 <chenhua...@foxmail.com> wrote:

> QSF architecture diagram updated, please see attached.
>
>
>
> ------------------ 原始邮件 ------------------
> *发件人:* "Jason.Chen" <chenhua...@foxmail.com>;
> *发送时间:* 2022年3月29日(星期二) 凌晨1:39
> *收件人:* "dev"<dev@rocketmq.apache.org>;
> *主题:* re: [DISCUSS] RIP-35 queue service framework(QSF)
>
> QSF architecture diagram updated here:
>
>
>
>
> ————————— 原始邮件 —————————
> 发件人: “Jason.Chen” chenhua...@foxmail.com
> <http://mailto:chenhua...@foxmail.com>;
> 发送时间: 2022年3月25日(星期五) 晚上11:35
> 收件人: “dev”dev@rocketmq.apache.org <http://mailto: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> 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” chenhua...@foxmail.com
> <http://mailto:chenhua...@foxmail.com>;
> 发送时间: 2022年3月25日(星期五) 晚上9:25
> 收件人: “dev”dev@rocketmq.apache.org <http://mailto:dev@rocketmq.apache.org>;
> 主题: 回复: [DISCUSS] RIP-35 queue service framework(QSF)
>
> ————————— 原始邮件 —————————
> 发件人: “Jason.Chen” chenhua...@foxmail.com
> <http://mailto:chenhua...@foxmail.com>;
> 发送时间: 2022年3月16日(星期三) 晚上9:39
> 收件人: “dev”dev@rocketmq.apache.org <http://mailto: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” duhengfore...@apache.org
> <http://mailto:duhengfore...@apache.org>;
> 发送时间: 2022年3月16日(星期三) 晚上8:44
> 收件人: “dev”dev@rocketmq.apache.org <http://mailto: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 yu...@apache.org <http://mailto: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 chenhua...@foxmail.com
> <http://mailto:chenhua...@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”
> <
> chenhua...@foxmail.com>;
> 发送时间: 2022年3月16日(星期三) 中午12:55
> 收件人: ”dev”<dev@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.
>
> ​
>

Reply via email to