+1 liqipeng <[email protected]> 于2019年9月9日周一 下午2:28写道:
> +1 > > 在 2019年9月6日,上午11:35,heng du <[email protected]> 写道: > > > > Hello RocketMQ Community, > > > > This is the vote for the kickoff of RIP-16 RocketMQ Request-Response > model > > support > > > > RPC is a powerful technique for constructing distributed, client-server > > based applications. Many companies use the MQ system to constructing > their > > service bus, especially in the financial industry. We need to implement > an > > RPC client based on MQ system ourselves because the MQ system doesn’t > > support RPC naturally. In the current version of rocketmq project, > producer > > client only support to send a message to the broker and cannot wait a > > response message replied from the consumer. We wish RocketMQ can provide > an > > RPC client implement to help developers building their applications > > conveniently and effectively. > > > > > > The vote will be open for at least 72 hours or until a necessary number > of > > votes are reached. > > > > Please vote accordingly: > > > > [ ] +1 approve > > [ ] +0 no opinion > > [ ] -1 disapprove with the reason > > > > > > Thanks, > > The Apache RocketMQ Team > > > > heng du <[email protected]> 于2019年9月6日周五 上午11:32写道: > > > >> @wenfeng > >> > >> Actually, Building RPC based on message queue is a very traditional > >> approach, especially in the previous ESB, SOA era. Of course, in today's > >> micro-services, there are many benefits to building micro-services > based on > >> MQ. > >> > >> For example, at the transport layer level, MQ can provide true > >> asynchronous communication for RPC. In terms of visualization, MQ can > also > >> provide better visibility and make it easier to replay traffic to > locate or > >> fix issues, which is very important in event-driven architectures. Most > >> important of all, direct RPC will make the access relationship between > >> services become mesh, but based on MQ, the problem of network mesh calls > >> are solved. In many industries, such as the financial industry, it is > >> difficult to provide all the network access. > >> Moreover, the request-response model can be used to make RocketMQ > >> integrate well into various infrastructures. In addition, many of the > same > >> types of message middleware also provide request-response access > methods. > >> > >> So I think that supporting the request-response model will increase the > >> competitiveness of RocketMQ and better expand the usage scenario. > >> > >> > >> wenfeng wang <[email protected]> 于2019年8月27日周二 下午6:15写道: > >> > >>> IMO, The most popular scenario of MQ System is that decouple complex > >>> distributed system and process message asynchronous. If a user wants > low > >>> latency or explicit response from downstream, he should use an RPC > >>> Framework instead of MQ, like Dubbo, gRPC, etc. so I vote for -1. > >>> > >>> > >>> heng du <[email protected]> 于2019年8月27日周二 下午5:54写道: > >>> > >>>> Dear Apache RocketMQ Community: > >>>> > >>>> We would like to propose a RIP[16] about RocketMQ RPC(Request-Response > >>>> model) Support. Many companies use the MQ system to constructing their > >>>> service bus, especially in the financial industry. We wish RocketMQ > can > >>>> provide an RPC client implement to help developers building their > >>>> applications conveniently and effectively. > >>>> > >>>> > >>>> Status > >>>> > >>>> Current State: Proposed > >>>> > >>>> Authors: qqeasonchen > >>>> > >>>> Shepherds: duhengforever > >>>> > >>>> Mailing List discussion: dev, users > >>>> > >>>> Pull Request: none > >>>> > >>>> Released: 4.6.0 > >>>> > >>>> Background & Motivation > >>>> > >>>> RPC is a powerful technique for constructing distributed, > client-server > >>>> based applications. Many companies use the MQ system to constructing > their > >>>> service bus, especially in the financial industry. We need to > implement an > >>>> RPC client based on MQ system ourselves because the MQ system doesn’t > >>>> support RPC naturally. In the current version of rocketmq project, > producer > >>>> client only support to send a message to the broker and cannot wait a > >>>> response message replied from the consumer. We wish RocketMQ can > provide an > >>>> RPC client implement to help developers building their applications > >>>> conveniently and effectively. > >>>> > >>>> Goals > >>>> > >>>> - What problem is this proposal designed to solve? > >>>> > >>>> (1) Design and implement an RPC interface based on RocketMQ Producer, > >>>> which support send a message and then wait a response message replied > from > >>>> the consumer. > >>>> > >>>> (2) Design and Implement a consumer which can automatically or > manually > >>>> send a reply message. > >>>> > >>>> (3) Enable the broker to push a message to an explicit producer. > >>>> > >>>> > >>>> > >>>> - To what degree should we solve the problem? > >>>> > >>>> We wish developers can use RocketMQ easily to constructing their > >>>> distributed applications which need RPC call. > >>>> > >>>> Non-Goals > >>>> > >>>> - What problem is this proposal NOT designed to solve? > >>>> > >>>> In this phase, this rip only supports a usable RPC call in most common > >>>> scenarios. > >>>> > >>>> - Are there any limits to this proposal? > >>>> > >>>> Users may need to tune some client and broker’s configurations to > >>>> achieve better performance. > >>>> > >>>> Changes > >>>> > >>>> Architecture > >>>> > >>>> We plan to add RPC implement into client and broker modules. In client > >>>> modules, we will add an RPC interface into DefaultMQProducer, and add > reply > >>>> logic into DefaultMQPushConsumer. In broker modules, we will add a > >>>> processor to push reply message from consumer to explicit producer. > >>>> > >>>> Interface Design/Change > >>>> > >>>> - Method signature changes > >>>> > >>>> Plan to add interfaces as follow: > >>>> > >>>> > >>>> Message request(final Message msg, final long timeout) throws > MQClientException, RemotingException, MQBrokerException, > InterruptedException; > >>>> > >>>> > >>>> > >>>> Message request(final Message msg, final SendCallback sendCallback, > >>>> final long timeout) throws MQClientException, RemotingException, > >>>> InterruptedException; > >>>> > >>>> > >>>> > >>>> Message request(final Message msg, final MessageQueueSelector > selector, > >>>> final Object arg, final long timeout) throws MQClientException, > >>>> RemotingException, MQBrokerException, InterruptedException; > >>>> > >>>> > >>>> > >>>> Message request(final Message msg, final MessageQueueSelector > selector, > >>>> final Object arg, final SendCallback sendCallback, final long timeout) > >>>> throws MQClientException, RemotingException, InterruptedException; > >>>> > >>>> > >>>> > >>>> Message request(final Message msg, final MessageQueue MQ, final long > >>>> timeout) throws MQClientException, RemotingException, > MQBrokerException, > >>>> InterruptedException; > >>>> > >>>> > >>>> > >>>> Message request(final Message msg, final MessageQueue mq, final > >>>> SendCallback sendCallback, long timeout) throws MQClientException, > >>>> RemotingException, InterruptedException; > >>>> > >>>> > >>>> > >>>> - Method behavior changes > >>>> > >>>> No issue > >>>> > >>>> - CLI command changes > >>>> > >>>> No issue > >>>> > >>>> - Log format or content changes > >>>> > >>>> No issue > >>>> > >>>> Compatibility, Deprecation, and Migration Plan > >>>> > >>>> - No issue > >>>> > >>>> Implementation Outline > >>>> > >>>> We will implement the proposed changes by *1* phase. > >>>> > >>>> Phase 1 > >>>> > >>>> 1. Implement RPC feature in Producer > >>>> 2. Implement RPC feature in Consumer > >>>> 3. Implement RPC feature in Broker > >>>> > >>>> > > >
