概述
使用轻量消息队列(原 MNS)中的HttpEndpoint接口鉴权时,远程请求公钥证书比较耗时,本文主要介绍提高鉴权性能的方法。
问题原因
轻量消息队列(原 MNS)的每个推送请求中都会携带公钥证书地址,可根据公钥证书地址,通过键值对(Key-Value)的方式缓存证书。之后只要证书没有更新,就可以从内存中直接获取证书,减少每次远程请求的耗时。如果证书更换,证书名和地址可能会随之更新。
解决方法
在处理推送请求时,根据x-mns-signing-cert-url
参数中的地址从缓存中直接获取证书。如果获取失败,则通过远程访问证书并存储到缓存,以便下次使用,可参考如下示例。
例如,公钥证书地址为:https://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem
,可使用如下方式缓存公钥证书。
typedef map<string, string> cache;
cache["x509_public_certificate.pem"] = "$content";
cache["x509_public_certificate.pem.version2"] = "$content2";