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"
<[email protected]>;
????????: 2022??3??25??(??????) ????9:25
??????: "dev"<[email protected]>;
????: ?????? [DISCUSS] RIP-35 queue service framework(QSF)
------------------ ???????? ------------------
??????:
"Jason.Chen"
<[email protected]>;
????????: 2022??3??16??(??????) ????9:39
??????: "dev"<[email protected]>;
????: ?????? [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"
<[email protected]>;
????????: 2022??3??16??(??????) ????8:44
??????: "dev"<[email protected]>;
????: 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 <[email protected]> ??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 <[email protected]>
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: [email protected]
> >
> > ??&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"
>
>
<
> > [email protected]&gt;;
> > ????????:&nbsp;2022??3??16??(??????) ????12:55
> > ??????:&nbsp;"dev"<[email protected]&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:
> > [email protected]
> >
> > ??&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.
>