java - 在 Java Lambda 中无法使用 Reddison 客户端(使用 samLocal 和 localstack)
问题描述
我不确定是什么导致这不起作用。每次代码在客户端初始化时,它都会停止工作在 Lambda 设置中使用 Redisson 不可行吗?
初始化redisson客户端的主要代码:
public boolean itemExistInCache(String item) {
Config config = new Config();
config.useSingleServer().setAddress("127.0.0.1:6379");
// this one is not working
RedissonClient redissonClient = Redisson.create(config);
}
设置
每次在 SQS 中注册消息时,都会触发包含上述代码的 Lambda。SQS 消息订阅了一个 SNS 主题。
SNS + SQS 设置是使用 localstack 创建/初始化的
- Lambda 使用 aws sam local 运行(pip3 install --user aws-sam-cli)
到目前为止我尝试过的工作
- using Jedis jedis = new Jedis() //使用相同的redis "localhost:6379"
解决方案
如果您打算在“真实” lambda(与 sam-local)中运行此代码,则需要在 VPC 中运行 lambda,在这种情况下,除非您在 VPC 中设置 NAT 或类似设备,否则它将没有外部网络。
如果在 sam-local 中您使用 127.0.0.1 - 您确定在 sam-local 中运行的“lambda”不在网络 cgroup 中(例如在 docker 中运行 - 如果在 docker 中,“localhost”可能不在 redis 的位置生活)?这个问题/问题几乎可以肯定是关于 sam-local 中的网络连接和端口映射的问题。您可以通过尝试其他方法来验证这一点,而不是 reddison 尝试连接到端点以查看它是否完全连接 - URL.openStream() 至少应该连接到足以给出错误。(redis 不是 HTTP,所以它不会“工作”,但它会连接和挂起——挂起几乎总是与 IP 或端口隔离有关)
推荐阅读
- r - 如何使用 '。' 在带有数值公式的 magrittr 中
- python - 具有互斥任务的多任务学习?
- sql - 将列表中的值添加到每个唯一 ID 代码 [SQL]
- authentication - 使用 MSXML2.XMLHTTP.6.0 登录网站
- php - 使用 laravel 和 ajax 显示表单验证错误
- javascript - 我对 js 代码 querySelectorAll 有问题
- python-3.x - 在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型
- python - 有没有一种简单的方法可以从 python 中的两个不相等的数组构造一个 n × n 数组?
- reactjs - 卸载组件时无法执行“removeChild”
- php - Webpack 找不到 php 文件