NodeJS 服务无法在AWS上获取锁,但它在本地计算机上工作正常

h4cxqtbf  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(380)
lock(name: string, expirationTime: number) {
        return new Promise((resolve, reject) => {
            this.redisClient
                .setnx(name, 'locked')
                .then(async (res) => {
                    if (res == 1) {
                        await this.redisClient.expire(name, expirationTime)
                        resolve('OK')
                    } else reject('Lock already held by another client')
                })
                .catch((err) => {
                    reject(err)
                })
        })
    }

    releaseLock(name: string) {
        return new Promise((resolve, reject) => {
            this.redisClient
                .del(name)
                .then((res) => {
                    resolve('OK')
                })
                .catch((err) => {
                    reject(err)
                })
        })
    }

我已经使用上述代码来获取锁并释放它,它在本地PC上工作正常,但在AWS上不工作。事件ot不会引发任何错误
用法:

this.redisDataServices
            .lock('publisher:lock', 30)
            .then(async (lock) => {
                  // do something...
            })
vyu0f0g1

vyu0f0g11#

以下是一些需要检查的事项:
1.Redis配置:确保您的AWS环境中的Redis服务器配置正确,并且可以从您的应用程序访问。验证用于连接Redis的主机、端口和身份验证详细信息(如果有)。
1.网络连接:确保您的AWS环境允许出站连接到Redis服务器。检查安全组和网络配置以确认允许必要的网络流量。
1.Redis版本兼容性:检查本地机器上运行的Redis版本和AWS上运行的版本。版本之间的行为或功能可能存在差异,这可能会影响锁获取和释放操作。
1.错误处理:虽然您提到没有引发错误,但在代码中包含错误处理和日志记录是一个很好的做法。添加适当的错误处理和日志记录语句,以捕获在锁获取或释放过程中可能发生的任何潜在错误或异常。这可以帮助您识别可能在静默状态下发生的任何问题或错误消息。
1.AWS特定注意事项:AWS环境通常具有额外的安全层或基础设施组件,这些组件可能会影响应用程序的行为。确保您拥有必要的权限和配置,以便与Redis或您正在使用的任何其他服务进行交互。
通过检查这些方面并确保您的AWS环境已正确配置为与Redis一起使用,您应该能够识别并解决可能导致本地计算机和AWS之间行为差异的任何问题。

相关问题