I've created issue https://issues.apache.org/jira/browse/THRIFT-2704 and
submited patch, maybe it'll get accepted :)
W dniu 2014-09-12 18:25, Randy Abernethy pisze:
+1
On Sep 12, 2014 8:13 AM, "Nevo Hed" <[email protected]> wrote:
Steven
I can confirm that for my oneway messages I observe the same T_CALL (I have
not looked into why)
The difference is that one way messages have fooClient::bar that just call
send_bar and if it was not oneway it would call send_bar AND recv_bar
Now realize that you do not have to use the RPC mechanism at all - you
could just serialize objects into your messages, perhaps with a custom
header (there may be something supported already). This is what we have
been doing since thrift0.6.x for SOME of our connections - for that case we
do not even define a service, just objects and an enumeration of messages
On Fri, Sep 12, 2014 at 8:31 AM, Steven Varga <[email protected]>
wrote:
Hi,
the following service generates oneway RPC call flagged with T_CALL flag
as
opposed to expected T_ONEWAY; I need the T_ONEWAY flag to implement
proper
zero MQ message passing. Zero MQ message passing system differentiates
between request - reply patterns and push - pull ones at socket level;
Am I doing something wrong ?
best,
steve
service foo {
oneway void bar( 1:string value );
}
void fooClient::put( const std::string& value ) {
send_bar( value ); // <- this is correct that recv_xxx is missing
}
// ----- incorrect or unreasoned T_CALL instead of T_ONEWAY
void fooClient::send_bar(const std::string& value) {
int32_t cseqid = 0;
oprot_->writeMessageBegin("bar", ::apache::thrift::protocol::T_CALL,
cseqid);
....
}
------ EXAMPLE -----
service foo {
oneway void bar( 1:string value );
}
------------- response excerpt ----------
void fooClient::bar(const std::string& value)
{
send_bar(value);
}
void fooClient::send_bar(const std::string& value)
{
int32_t cseqid = 0;
oprot_->writeMessageBegin("bar", ::apache::thrift::protocol::T_CALL,
cseqid);
foo_bar_pargs args;
args.value = &value;
args.write(oprot_);
oprot_->writeMessageEnd();
oprot_->getTransport()->writeEnd();
oprot_->getTransport()->flush();
}