QSF architecture diagram updated here:
?????????????????? ???????? ?????????????????? ??????: ??Jason.Chen?? chenhua...@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> 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; ????????: 2022??3??25??(??????) ????9:25 ??????: ??dev??dev@rocketmq.apache.org; ????: ?????? [DISCUSS] RIP-35 queue service framework(QSF) ?????????????????? ???????? ?????????????????? ??????: ??Jason.Chen?? chenhua...@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?? duhengfore...@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 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 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? 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 ?? 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? Add new features to classics mq client. 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. ?6?7