前言:
最近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/