由 HP Cloud 开源工程总监 Mark Atwood 发布
对良好理解的应用程序间消息的需求是新应用程序设计模式超越 LAMP 堆栈的一个信号。
圣地亚哥格里兹利峰会认识到了对 OpenStack 消息服务的需求,并在最后一天的非正式会议设计会议上,一群感兴趣的人们聚集在一起,讨论了一些需求,由此诞生了 OpenStack 消息总线 项目。它被命名为“Marconi”,以纪念 Guglielmo Marconi,无线消息的发明者。Marconi 团队在 Launchpad 上进行协作。
与此同时,HP 正在寻找一种方法,使其已经开发中的应用程序消息传递服务可供 HP Cloud 的用户使用。当 Marconi 项目出现时,HP 决定,与其在毫无意义的 API 标准战中分裂开发社区,不如克隆并跟踪公共 Marconi API,然后为开源 Marconi 项目本身做出贡献。
作为开发过程的一部分,HP 正在“开发者预览版”中运行消息传递服务,这意味着您必须申请加入预览程序才能访问它,并且该服务和 API 都不稳定。哦,而且现在它是免费的。
登录您的 HP Cloud 帐户,然后转到 URL https://account.hpcloud.com/services 并查找“Beta 服务”,然后“请求访问”到“消息传递”。您的请求将被审核,然后激活。这可能需要几天时间,因为此决策循环中有人工干预。
OpenStack 和 HP Cloud 的所有部分都通过 RESTful API 控制,消息传递也不例外。我们将使用 cURL 命令行工具访问原始 API。使用专门的客户端工具可能更易于使用,并且这些工具正在开发中。但是,第一次逐步完成此过程有助于了解所有部分的工作方式。
首先我们需要的是您的 HP Cloud 帐户的 API 凭据。
登录您的 HP Cloud 帐户后,转到 URL https://account.hpcloud.com/account/api_keys 并查找以下信息
- “项目 ID”,例如“58345815996918”
- “访问密钥 #1”,例如“2DJ3Z58RZB5JJ7V2JKS3”
- “显示密钥”。单击它时,将显示类似“bPH13haenb/DlvR1th+u4Uj5ehvYKsF7ApYact6i”的内容
- “身份” “region-a.geo-1”的 URL。它将类似于 https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/
- “消息传递” “region-a.geo-1”的 URL。它将类似于 https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918
现在打开文本编辑器,并构造一个名为 keystone-req.json 的文件,其中包含以下 JSON 内容,仅使用您自己的访问密钥、密钥和租户 ID(也称为“项目 ID”)。
{
"auth": {
"apiAccessKeyCredentials": {
"accessKey": "2DJ3Z58RZB5JJ7V2JKS3",
"secretKey": "bPH13haenb/DlvR1th+u4Uj5ehvYKsF7ApYact6i"
},
"tenantId": "58345815996918"
}
}
现在,在命令行提示符下,运行以下 cURL 命令。请注意,URL 是我们之前查找的“身份” “region-a.geo-1”的 URL,并附加了“/tokens”部分。
curl -X POST -H "Content-Type: application/json" \
https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens \
-d @keystone-req.json \
| python -mjson.tool > keystone-rsp.json
请注意,我们通过“python -mjson.tool”管道输出。这是一个有用的技巧,可以美化 JSON,使其更易于阅读。
在文本编辑器中打开生成的 keystone-rsp.json 文件,然后查看。
搜索字符串“token”,您应该看到类似的内容
"token": {
"expires": "2013-05-21T12:38:16.962Z",
"id": "HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20",
"tenant": {
"id": "58345815996918",
"name": "[email protected]"
}
},
重要部分是“access.token.id”值。我们将在接下来的几个 cURL 命令的 HTTP X-Auth 标头中粘贴该字符串。
现在搜索文件中的字符串“hpext:messaging”,您将找到一个如下所示的 JSON 块
{
"endpoints": [
{
"publicURL": "https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918",
"publicURL2": "",
"region": "region-a.geo-1",
"tenantId": "58345815996918",
"versionId": "1.1",
"versionInfo": "https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1",
"versionList": "https://region-a.geo-1.messaging.hpcloudsvc.com"
}
],
"name": "Messaging",
"type": "hpext:messaging"
},
“publicURL”是我们用于向消息传递服务发出 REST 命令的 URL。以下是如何列出我们可以使用的所有队列。请注意,我们在 X-Auth-Token 标头中传递了 keystone 身份验证令牌。
curl -X GET -H "Content-Type: application/json" \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues \
| python -mjson.tool
我们可能会看到
{
"queues": []
}
这意味着,从逻辑上讲,没有创建队列。
让我们创建一个。我们将方法更改为 PUT,并附加 queues/foo 以创建一个名为“foo”的队列。无需使用 JSON 漂亮打印器,因为不会返回请求体。
curl -X PUT -H "Content-Type: application/json" \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues/foo
然后我们再次列出所有队列。
curl -X GET -H "Content-Type: application/json" \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues \
| python -mjson.tool
返回的结果是
{
"queues": [
{
"name": "foo"
}
]
}
看,一个名为 foo 的队列。
现在让我们将一些内容放入该 foo 队列。我们通过向队列 URL POST 一些 JSON 来实现,并在路径部分附加“/messages”,如下所示
curl -X POST -H "Content-Type: application/json" \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues/foo/messages \
-d '{ "body": "Hello World!" }'
然后将其读回来。
curl -X GET -H "Content-Type: application/json" \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues/foo/messages
这将删除该项目并显示
{"id":"b41ea44e-3962-4010-80ad-4f87dcd6ba8d","body":"Hello World!"}
然后让我们删除该队列
curl -X DELETE \
-H "X-Auth-Token: HPAuth10_3e1c44e527f0e64387ff0705e1b09d0ca3ef47c47a6c6afe1738d77f896b4f20" \
https://region-a.geo-1.messaging.hpcloudsvc.com/v1.1/58345815996918/queues/foo
和往常一样,如果您有任何问题,请给我们发送电子邮件。您可以直接通过 [email protected] 联系我
..m