0

稍后我的问题也被问到Trigger Apollo Subscription 与 Agenda,但没有答案,我没有足够的声誉在那里发表评论。不知道该怎么做,所以我发布了一个新问题。

我正在使用 graphql-yoga 并使用 pubsub 来触发订阅。我有一个突变,它接收 pubsub 作为上下文参数。从那里,我可以通过 pubsub.publish 发布我的订阅。这工作正常。

我还通过议程(https://github.com/agenda/agenda)安排工作。当这些作业稍后运行时,我会更新数据库。这也有效。

我的问题是,当我在议程作业中更新数据库时,我还需要将数据库更新发布到订阅。我不知道如何在我的议程功能中访问 pubsub。

我尝试将我已经在突变中的 pubsub 对象包含在我提供给工作的数据中,希望我以后可以访问 pubsub。但这不起作用(不足为奇)。

我找不到任何文档,并且我发现的类似 stackoverflow 问题(上面链接)没有任何响应。

有谁知道是否可以从议程工作中触发订阅?

4

1 回答 1

0

我不熟悉agenda,但我怀疑它在与您的 GraphQL 服务器不同的进程中运行作业。默认PubSub实现只使用EventEmitter并且不能跨多个进程工作。因此,您应该使用将订阅持久保存在某处的实现,例如数据库、键值存储、消息队列等。创建一个模块并导出 PubSub 实例:

// pubsub.js

const { RedisPubSub } = require('graphql-redis-subscriptions')
const Redis = require('ioredis')

const options = {
  // redis client options
};

module.exports = new RedisPubSub({
  publisher: new Redis(options),
  subscriber: new Redis(options)
})

然后,您可以在 GraphQL 解析器和作业中导入该模块,publishsubscribe根据需要调用和调用。

于 2019-10-28T16:50:43.037 回答