前言:
最近grpc有点火,正好项目用到rpc调用,记录一下。
grpc.ServerCredentials.createSsl 这个API有多不稳定,短短一年各种写法横空出世。在最新的版本中是这样写的…浪费了一下午时间查文档,而且文档还停留在…
https://grpc.io/grpc/node/grpc.ServerCredentials.html
// Server 改成这样真够奇葩的
var server = new grpc.Server(); server.addService(hello_proto.Greeter.service, { sayHello: sayHello }); let credentials = grpc.ServerCredentials.createSsl( fs.readFileSync(__dirname + '/keys/ca.crt'), [{ cert_chain: fs.readFileSync(__dirname + '/keys/server.crt'), private_key: fs.readFileSync(__dirname + '/keys/server.key') }], true); server.bind('0.0.0.0:2333',credentials) server.start();
// 一定保证XXX 证书 commonName 一致 否则会验证失败 var client = new hello_proto.Greeter('127.0.0.1:2333', grpc.credentials .createSsl( fs.readFileSync(__dirname + '/keys/ca.crt'), fs.readFileSync(__dirname + '/keys/client.key'), fs.readFileSync(__dirname + '/keys/client.crt'), ), { "grpc.ssl_target_name_override": "XXX", "grpc.default_authority": "XXX" } );
关于双向SSL配置的
使用openssl生成CA证书(根证书、server证书、client证书)
证书配置:
https://www.cnblogs.com/wanderwei/p/7493175.html
看了配置过程就大概知道如何配置了。
grpc模块 关于服务负载方法, 以及服务加载方式等可以写个小轮子了。API真的很不人性化, grpc底层C来实现协议封包解包效率很高,项目组还实现了node版本的client库,不建议使用,效率是一定不如grpc-node-core的
其他 — 一个 redis 实现分布式锁的redlock方案:
http://ifeve.com/redis-lock/