【发布时间】:2019-10-25 16:44:29
【问题描述】:
我有一个节点进程,它当前正在https://company/api/bats_hook/ 接收 POST 请求。我想在有作业时通知 python 进程。我正在使用 node_redis 和 redis-py,实现如下所示。
当节点进程在本地运行时,以下代码在本地运行良好,当我将节点端点推送到服务器时,我似乎没有得到事件?
如何从 python 客户端订阅服务器上的端点?缺什么?我确实在https://company/api/bats_hook/服务器上部署了redis服务器
javascript
var redis = require("redis"),
//redisClient = redis.createClient();
redisClient = redis.createClient({url: process.env.REDIS_URL});
app.post("/api/bats_holder", (req, res, next) => {
console.log(req.query.params)
console.log(req.body)
console.log(req.body.name)
// This publishes a message to the "bats hook channel"
redisClient.publish("bats hook channel", JSON.stringify({
params: req.query.params,
body: req.body,
}));
res.status(200).json({
message: "BATS object",
posts: req.body
});
});
蟒蛇
import redis
r = redis.Redis()
p = r.pubsub()
p.subscribe('bats hook channel')
# This blocks and reads any messages from the "bats hook channel" as they come in
for message in p.listen():
print(message)
【问题讨论】:
-
你能澄清一下 redis 服务器的运行位置,以及你的节点服务器和 python 客户端吗?他们三个是在同一台服务器上运行,还是单独运行?
-
请同时提供节点脚本中的任何错误日志以及环境配置的用途,例如
REDIS_URL适用于 nodem python 和 redis 进程。 -
以下是服务器文档
Your application will get an environment variable called REDIS_URL, which takes the form of: redis://redisdb:<password>@<host>:<port>/0 Environment Variables REDIS_URL -
@alex067 - redis 和节点服务器在同一台服务器上运行,python 客户端在我的 mac 上本地运行...
-
@Ritz 然后正如我在回答中提到的那样,您需要使用 REDIS_URL 为它们两者配置通用 Redis。检查它是否有帮助。
标签: python node.js redis node-redis redis-py