首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用IOT适配器和python中的google pub/sub api将MQTT与GCP集成

使用IOT适配器和python中的google pub/sub api将MQTT与GCP集成
EN

Stack Overflow用户
提问于 2017-06-25 18:41:01
回答 2查看 2.1K关注 0票数 2

与App Engine标准的云发布/订阅API集成

我正在开发一个标准的Python环境中的谷歌应用程序引擎应用程序。对于代码的某些部分,我需要与Google Cloud发布/订阅API集成。

正如前面提到的here,发布/订阅只能集成在App Engine灵活的环境中(顺便说一句,它也只是alpha版)。有人能描述一下如何在App Engine标准环境中集成Pub/Sub吗?

我的用例描述

我正在尝试通过使用Agosto IOT broker将MQTT与google应用程序引擎集成。我将在客户端(目前是移动平台)使用MQTT,在服务器端,我计划使用pub/sub接收/发送消息并将相关数据保存到数据库中。

EN

回答 2

Stack Overflow用户

发布于 2017-09-20 07:27:04

您可能想尝试使用新的Google Cloud IoT Core产品(完全公开,我正在研究它),而不是在App Engine上托管MQTT。Cloud允许您连接到谷歌提供的IoT桥,该桥将把您的数据放入Google Cloud PubSub。您可以使用Google Cloud DataFlow将数据从PubSub移动到您的数据仓库进行分析,也可以使用您自己的数据库作为DataFlow的输出。

与Google Cloud MQTT Core MQTT桥通信的连接细节是discussed in detail in the documentation,但是您需要知道的重要连接属性是主机名(mqtt.googleapis.com)端口(8883或443)和MQTT密码/客户端ID,它们将基于您为服务配置的设备。

实际的MQTT客户端需要根据您尝试访问MQTT桥的编程语言进行选择。如果你从Android开始尝试,你可以从Java MQTT client sample开始,最终可能会得到来自AndroidThings团队的like the Android Things Cloud IoT sensor hub connector

票数 3
EN

Stack Overflow用户

发布于 2017-06-26 03:59:26

TL;DR -应用程序引擎标准不支持较新的Google Cloud Client libraries。相反,您将需要使用较旧的Google Cloud API Client librariesCloud Pub/Sub通信。

云API客户端库(较早版本)与Google Cloud客户端库(较新版本)

Cloud Pub/Sub client library documentation you're pointing to建议您使用较旧的Google API Client libraries (在App Engine标准环境中受支持)而不是Google Cloud Client libraries (在App Engine灵活环境中受支持,但在标准环境中不受支持)

客户端库在here中有详细的解释。

面向云发布/订阅的Google API客户端库

下面是使用Google API客户端库支持的所有list of APIsCloud Pub/Sub APIs也是这个列表的一部分。

将Google API客户端库与App Engine标准结合使用

如果您向下滚动该页面,会有一个描述how this API library can be used in App Engine Standard environment的部分。简而言之,您需要将库与您的应用程序捆绑在一起,就像您使用的其他第三方库一样。

应用程序引擎

因为Python客户端库没有安装在App Engine Python runtime environment中,所以它们必须是vendored into your application,就像第三方库一样。

此警告提示您将看到on the page,建议您尽可能使用常规的云客户端库。但由于App Engine Standard不支持它,因此您可以忽略该用例。

虽然这个库仍然受到支持,但我们建议尝试使用Google Cloud发布/订阅的较新的云客户端库,特别是对于新项目。有关安装和使用的详细信息,请参阅Google Cloud Pub/Sub Libraries

使用google-api-python-client库调用PubSub api的示例

使用来自服务帐户json文件的凭据

以下示例将向您展示如何使用服务帐号通过谷歌云PubSub API进行身份验证并进行调用。有关如何使用来自服务帐户的凭据的信息为available here

您需要预先安装以下python包才能运行此示例:google-api-python-clientoauth2client

如果您使用的是pip,则可以执行以下操作:

代码语言:javascript
运行
复制
pip install google-api-python-client oauth2client

我亲自测试过的示例:

代码语言:javascript
运行
复制
from googleapiclient import discovery
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials

# BEGIN CONFIG
PRIVATE_KEY_JSON = 'path/to/service_account_private_key.json'
API_SCOPES = ['https://www.googleapis.com/auth/pubsub']
PROJECT_NAME = 'FILL_IN_PROJECT_NAME_HERE'
# END CONFIG

# The format of project name expected by PubSub
PROJECT = 'projects/{0}'.format(PROJECT_NAME)

# Create a ServiceAccountCredentials object by reading the credentials from
# your JSON file.
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    PRIVATE_KEY_JSON, scopes=API_SCOPES)

# Build the Cloud PubSub API object which you will be using for
# invoking the corresponding APIs using the credentials object
# you created previously
pubsub = discovery.build('pubsub', 'v1', credentials=credentials)

# List all topics the specified project
topics = pubsub.projects().topics().list(
    project=PROJECT).execute()
print topics

# Add a new topic
topic_name = 'TOPIC_NAME_TO_ADD'
added_topic_response = pubsub.projects().topics().create(
    name='{0}/topics/{1}'.format(PROJECT, topic_name), body={}).execute()
print added_topic_response

在App Engine应用中使用来自服务帐户的凭据

有一些关于如何使用你的应用程序引擎应用程序中的服务帐户凭据的信息here

除了初始化credentials对象的部分之外,上面的示例大部分都适用于调用PubSub API。该部件可以大致按如下所述进行更换:

如果您的App Engine应用程序需要调用一个OAuth来访问该应用程序的项目所拥有的数据,那么您可以使用Service Accounts来简化API2.0。这些服务器到服务器的交互不涉及用户,只需要您的应用程序对其自身进行身份验证。使用AppAssertionCredentials类创建Credentials对象,而不使用Flow对象。

在下面的代码片段中,创建了一个Credentials对象并授权了一个Http对象:

从google.appengine.api导入Memache...从oauth2client.contrib.appengine导入AppAssertionCredentials ...credentials = AppAssertionCredentials(scope='https://www.googleapis.com/auth/devstorage.read_write') http = credentials.authorize(httplib2.Http(memcache)) pubsub = discovery.build('pubsub','v1',http=http) ...

一旦有了授权的Http对象,就可以像往常一样将其传递给build()execute()函数。

使用应用程序默认凭据

您还可以使用Application Default credentials进行本地测试,也可以在App Engine环境中工作。

代码语言:javascript
运行
复制
from oauth2client.client import GoogleCredentials

...

credentials = GoogleCredentials.get_application_default()
pubsub = discovery.build('pubsub', 'v1', credentials=credentials)

...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44745528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档