【问题标题】:How to push from google pubsub to a servlet running on google app engine?如何从 google pubsub 推送到在 google app 引擎上运行的 servlet?
【发布时间】:2016-05-18 06:55:06
【问题描述】:

我正在尝试配置 google pubsub 以将消息推送到在 google 应用引擎上运行的 servlet。

我能够发布到该主题。我知道这是有效的,因为我可以使用 gcloud 通过拉取订阅进行检索:

gcloud alpha pubsub subscriptions pull projects/my-project/subscriptions/my-subscription

我还可以从我的网络浏览器调用应用引擎上的 servlet。但由于某种原因,我似乎无法说服 pubsub 在应该调用 servlet 时调用它。

我相信我已经正确配置了 servlet。
这是我的 web.xml 文件的相关部分:

<servlet>
    <servlet-name>dataExtracted</servlet-name>
    <servlet-class>com.alpine.servlets.CatchEventDataExtractedServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dataExtracted</servlet-name>
    <url-pattern>/_ah/push-handlers/dataExtracted</url-pattern>
</servlet-mapping>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>push-handlers</web-resource-name>
        <url-pattern>/_ah/push-handlers/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

我在调试时遇到了困难,因为我似乎无法访问任何可能表明错误来源的日志数据。消息只是消失在以太中。

发布订阅主题和订阅与应用引擎实例位于同一个项目中。

“Subscriber Guide”中有一点让我有点困惑的是这句话:

目前唯一支持的端点是 HTTPS 服务器,它可以 接受 Webhook 交付。

我不确定“Webhook 交付”到底是什么意思。

【问题讨论】:

  • webhook 可以简单地翻译为:您需要一个公开的 URL 来让 PubSub 在那里推送消息。订阅时,您只需将完整的 URL(例如:https://myappid.appspot.com/path/to/some/servlet)作为 pushEndpoint 传递。
  • 出于测试目的,我会放松 auth-constraint,以便您可以在日志中看到传入的(可能是失败的呼叫)。

标签: google-app-engine google-cloud-pubsub


【解决方案1】:

虽然没有日志可用于发布订阅,但日志可用于应用引擎。

在我的特殊情况下,我收到 405 错误,因为 pubsub 反复尝试访问不存在的资源。

事实证明,我已经实现了 doGet() 而不是 doPost(),因此我的 servlet 无法接收来自 pubsub 的推送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2016-08-28
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多