0

我想使用 Knative Sequence 链接几个 ksvcs 但失败了。可以触发第一步 ksvc,但不能触发其余步骤。

在我的 ksvc(Node.js) 中,我使用了 CloudEvent js-sdk。我假设我需要在收到新的 CloudEvent 后返回它。所以这是我的代码:

app.post('/', (req, res)=>{ 
   const event = HTTP.toEvent({ headers: req.headers, body: req.body });

   // respond as an event
   const responseEventMessage = new CloudEvent({
      source: '/',
      type: 'event:response',
      ...event
    });
   responseEventMessage.data = {
      hello: 'world'
    };
    res.status(201).json(responseEventMessage);
})
4

2 回答 2

3

我相信HTTP.binary()HTTP.structured()应该用于将事件转换为标题和正文。

    const responseEventMessage = new CloudEvent({
        ...receivedEvent,
        source: '/',
        type: 'event:response'
    });
    // const message = HTTP.binary(responseEventMessage)
    const message = HTTP.structured(responseEventMessage)
    res.set(message.headers)
    res.send(message.body)

编辑:可能需要设置正文解析器。

const bodyParser = require('body-parser')
app.post("/", bodyParser.json(), (req, res) => {})

此外,最好使用cloneWith()而不是传播。

    const responseEventMessage = receivedEvent.cloneWith({
        source: '/',
        type: 'event:response'
    });
于 2021-01-25T10:28:15.803 回答
0

您好,很抱歉给您带来麻烦。

我对js sdk不是很熟悉,但是我们这里使用的例子: https ://github.com/knative/docs/blob/master/docs/serving/samples/cloudevents/cloudevents-nodejs/index.js# L64

使用 .send() 而不是 .json()

至于配置序列,希望这些示例有助于正确配置序列: https ://knative.dev/docs/eventing/flows/sequence/

序列状态是否显示任何错误?

最后,您是否在日志中看到任何错误?根据您安装的组件,这可能会有所不同,但如果您正在运行核心并使用 InMemoryChannel,则日志将位于 knative-eventing 命名空间中,并且您会看到 imc-dispatcher-* pod,这将提供一个线索,如果事件构造不正确。

于 2021-01-25T10:15:02.467 回答