+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
>>>> 
>>>> 


Reply via email to