【发布时间】: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