如何使用 cloudevents sdk-javascript 回复 CloudEvent
How to reply with a CloudEvent using cloudevents sdk-javascript
我想使用 Knative Sequence 链接几个 ksvc,但失败了。可以触发第一步ksvc,但不能触发其余步骤。
在我的ksvc(Node.js)中,我使用了CloudEvent js-sdk。我想我需要 return 收到一个新的 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);
})
您好,很抱歉给您带来麻烦。
我对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-* pods 如果事件构造不正确,这将提供线索。
我认为应该使用 HTTP.binary()
或 HTTP.structured()
将事件转换为 headers 和 body。
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)
编辑:
可能需要设置 body-parser.
const bodyParser = require('body-parser')
app.post("/", bodyParser.json(), (req, res) => {})
此外,最好使用 cloneWith()
而不是传播。
const responseEventMessage = receivedEvent.cloneWith({
source: '/',
type: 'event:response'
});
我想使用 Knative Sequence 链接几个 ksvc,但失败了。可以触发第一步ksvc,但不能触发其余步骤。
在我的ksvc(Node.js)中,我使用了CloudEvent js-sdk。我想我需要 return 收到一个新的 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);
})
您好,很抱歉给您带来麻烦。
我对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-* pods 如果事件构造不正确,这将提供线索。
我认为应该使用 HTTP.binary()
或 HTTP.structured()
将事件转换为 headers 和 body。
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)
编辑: 可能需要设置 body-parser.
const bodyParser = require('body-parser')
app.post("/", bodyParser.json(), (req, res) => {})
此外,最好使用 cloneWith()
而不是传播。
const responseEventMessage = receivedEvent.cloneWith({
source: '/',
type: 'event:response'
});