作为无服务器项目中的事件源的消息中心不会创建任何触发器或规则

时间:2019-02-12 18:03:17

标签: node.js openwhisk

我正在尝试将Message Hub主题设置为云功能的事件源,如下所示:

custom:
  org: MyOrganization
  space: dev
  mhServiceName: my-kafka-service

functions:
  main:
    handler: src/handler.main
    events:
      - message_hub:
        package: /${self:custom.org}_${self:custom.space}/Bluemix_${self:custom.mhServiceName}_Credentials-1
        topic: test_topic

当我部署服务时,没有触发器或规则被创建。因此,当我向Kafka主题发布消息时,不会调用该函数。

我还尝试显式设置触发器和规则,但这仅创建了custom类型的触发器,而不是类型message hub的触发器。自定义触发器似乎在这种情况下不起作用。

我想念什么?

更新

正如James指出的,未创建触发器和规则的原因是由于缩进不正确这一事实。

在尝试部署该功能时,我仍然遇到找不到软件包的问题(请参阅我对James解决方案的回答),并且我发现了问题所在。

结果是,您还必须执行文档中未明确提及的两件事。

1)您必须手动创建服务凭证(文档假设您将其称为Credentials-1,所以我也做同样的事情) 2)您必须在serverless.yml

中将Kafka(消息中心,现在称为事件流)绑定到您的函数。

生成的函数定义应如下所示:

functions:
  main:
    handler: src/handler.main
    bind:
      - service:
          name: messagehub
          instance: ${self:custom.mhServiceName}
    events:
      - message_hub:
          package: /${self:custom.org}_${self:custom.space}/Bluemix_${self:custom.mhServiceName}_Credentials-1
          topic: test_topic

1 个答案:

答案 0 :(得分:1)

serverless.yml上的YAML缩进不正确。这意味着在部署期间框架不会注册事件属性。

serverless.yml文件更改为以下格式,它应该可以工作。

custom:
  org: MyOrganization
  space: dev
  mhServiceName: my-kafka-service

functions:
  main:
    handler: src/handler.main
    events:
      - message_hub:
          package: /${self:custom.org}_${self:custom.space}/Bluemix_${self:custom.mhServiceName}_Credentials-1
          topic: test_topic