Skip to content

Instantly share code, notes, and snippets.

@axw
Created April 5, 2019 03:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save axw/bc5025035fbd2cea6a4516349be8a7ce to your computer and use it in GitHub Desktop.
Save axw/bc5025035fbd2cea6a4516349be8a7ce to your computer and use it in GitHub Desktop.
Node.js gRPC client -> Go gRPC server
const apm = require('elastic-apm-node').start({
serviceName: 'geoip-node-client'
});
var grpc = require('grpc');
var interceptor = function(options, nextCall) {
return new grpc.InterceptingCall(nextCall(options), {
start: function(metadata, listener, next) {
var span = apm.startSpan('grpc');
var traceparent = span._context.toString();
metadata.add('elastic-apm-traceparent', traceparent);
console.log("metadata:", metadata);
next(metadata, listener, next);
span.end();
}
});
}
var PROTO_PATH = __dirname + '/proto/geoip/geoip.proto';
var protoLoader = require('@grpc/proto-loader');
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
var geoip = grpc.loadPackageDefinition(packageDefinition).geoip;
var options = {interceptors: [interceptor]};
var client = new geoip.Geoip('localhost:8008', grpc.credentials.createInsecure(), options);
var trans = apm.startTransaction('client_request', 'custom');
var ip = Buffer.from([124, 148, 74, 92]);
client.Lookup({IP: ip}, function(err, result) {
console.log(err, result);
});
trans.end();
apm.flush();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment