scala - Thrift Debugging: Problems with my finagle server -
i have simple thrift server, implemented in scala finagle:
import com.twitter.util.{ await, future } import com.jakiku.thriftscala.{ realtimedatabasepageimpressions, pageimpressions } import com.twitter.finagle.thrift import com.twitter.finagle.thrift.thriftserverframedcodec import com.twitter.finagle.builder.{ serverbuilder, server } object thriftserver { def main(args: array[string]) { val server = thrift.serveiface("localhost:9090", new realtimedatabasepageimpressions[future] { def getbytrackidandday(trackid: int, day: int) = { future(seq(pageimpressions.apply(123, 3, 4, 3, 2000l, 2000l))) } }) await.ready(server) } }
this thrift file:
namespace java com.jakiku.thriftjava #@namespace scala com.jakiku.thriftscala typedef i64 long typedef i32 int struct pageimpressionssum{ 1: required int trackid; 2: required int day; 3: required int hour; 4: required int minute; 5: required string pageid; 6: required long uniqueimpressions; 7: required long sumimpressions; } struct pageimpressions{ 1: required int trackid; 2: required int day; 3: required int hour; 4: required int minute; 6: required long uniqueimpressions; 7: required long sumimpressions; } service realtimedatabase_pageimpressions{ list<pageimpressions> getbytrackidandday(1:int trackid, 2:int day); } service realtimedatabase_pageimpressionssum { list<pageimpressionssum> getbytrackidandday(1:int trackid, 2:int day); }
i generated scala thrift classes scrooge. added thriftlib, scrooge-core, scrooge-generator etc. dependency. added scrooge sbt plugin:
addsbtplugin("com.twitter" % "scrooge-sbt-plugin" % "4.5.0")
i started server sudo sbt 'run'. output of console:
[info] running thriftserver mai 25, 2016 4:18:39 com.twitter.finagle.init$$anonfun$1 apply$mcv$sp information: finagle version 6.34.0 (rev=44f444f606b10582c2da8d5770b7879ddd961211) built @ 20160310-155158
everything looks fine, @ moment. tested server in nodejs. doesn't work. used thrift python test suite. every check runs timeout.
this nodejs client:
var thrift = require('thrift'); var realtime_pageimpressions = require('./gen-nodejs/realtimedatabase_pageimpressions.js'); var ttypes = require('./gen-nodejs/realtimedatabase_types.js'); var connection = thrift.createconnection("localhost", 9090); connection.on('error', function(err) { console.log(err); }); var client = thrift.createclient(realtime_pageimpressions, connection); client.getbytrackidandday(123124, 4, function(err, response) { if (err) { console.error(err); } else { console.log(response); } });
i have no idea i'm doing wrong.
not sure if problem (especially since i'm not familiar scrooge or finagle) looks you're using framed transport on server , maybe not on client.
looking @ node.js thrift library code, seems if tbufferedtransport
default, , might want tframedtransport
instead.
on node.js thrift tutorial page, show how can initialize connection overridden options:
var thrift = require('thrift'); var thrifttransports = require('thrift/transport'); var thriftprotocols = require('thrift/protocol'); var calculator = require('./gen-nodejs/calculator'); var ttypes = require('./gen-nodejs/tutorial_types'); transport = thrifttransports.tbufferedtransport() protocol = thriftprotocols.tbinaryprotocol() var connection = thrift.createconnection("localhost", 9090, { transport : transport, protocol : protocol });
you might try implementing node.js client above, except replace tframedtransport
, see if helps.
Comments
Post a Comment