wikipedia上的AMQP介绍

openstack中的rpc通信 RPC即Remote Procedure Call(远程方法调用),是Openstack中一种用来实现跨进程(或者跨机器)的通信机制。Openstack中同项目内(如nova, neutron, cinder...)各服务(service)及通过RPC实现彼此间通信。 RCP只定义了一个通信接口,其底层的实现可以各不相同。目前Openstack中的主要采用AMQP来实现。AMQP(Advance 阅读详情

原文:

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

 

Advanced Message Queuing Protocol

 

AMQP是针对面向消息中间件的开放式标准的应用层协议,它的特点是面向消息,存储队列,支持点对点及pub-sub的路由,可靠性和安全性。

 

AMQP允许来自不同供应商的消息生产者和消费者实现真正的互操作扩展,就如同SMTP、HTTP、FTP等协议采用的方式一样。而此前对于消息中间件的标准化努力则集中在API层面上(比如JMS),且没有提供互操作性的途径。不同于JMS的仅仅定义API,AMQP是一个线路级的协议——它描述了通过网络传输的字节流的数据格式。因此,遵从这个协议的任何语言编写的工具均可以操作AMQP消息。

 

概述

 

AMQP从开始就被设计为供应商中立(跨厂商的互操作性)的管理企业商务系统中消息流的协议。

AMQP提供一个系统中后端消息(如数据存储、各种服务等)和前端消息(如用户应用程序等)的会合点。第一款应用程序出现在金融业如交易,市场和订单的消息流都是实时的。AMQP原生就被用于企业之间,因此可以很容易的处理各个组织之间的不同消息。

 

AMQP使得系统架构师能够以简单的模型来架构通用的消息模式应用程序。典型的消息模式有:request-response,消息被发送或者回应到特定的接收者;publish-and-subscribe,根据不同的接收条件,消息被分发到一系列回应者处;round-robin,任务被完全的分发到一系列的接收者处。现实中的应用程序可能会组合应用这些模式,如通过round-robin模式来实现分布式处理并组合request-response模式来发送对请求的响应。

 

AMQP协议规范定义了应用在client和server(又被称为broker)之间的二进制线路层协议。另外,规范还提出了供应商来实现的消息队列模型和一系列服务。

 

AMQP的队列模型提供了广泛适用的消息用例,使得client和broker的功能都比较精炼。broker的功能可分为两类:交换和消息队列。消息队列用来存储消息,不同的实现可以达成不同的QoS。例如,一个慢速但是能抵御消息风暴的队列可以用来在多点体系中提供冗余,而一个快速但是脆弱的消息队列则可以将每个消息保存在一个处理器的内存中。为了帮助提升互操作性,AMQP协议对于消息队列有一些规范定义,比如,可以请求broker创建一个新的消息队列等。

 

标准的AMQP交换机制没有对消息排序功能。通过交换,消息被送往存储并维护接收者的队列。交换机制实现一系列消息路由技术:one-to-one,就像单个email那样通知一个接收者;one-to-N,如同邮件列表;one-to-one-of-N,像是一个带开放检查点的队列,等等。所有的交换器都可接收多个发送者,AMQP也就允许所有的one-to-any路由变为N-to-any路由。配置一个交换的规则称为绑定,可以简单地只是将任何消息传递至队列,也可以复杂到对消息的内容进行检查。AMQP通过定制交换(可以是队列,发生器,消费者,路由消息等,取决于具体实现)允许任意条件的交换。

 

消息由两部分组成:用来路由的,由属性组成的"信封",及应用程序产生的任意长度的消息内容。AMQP消息内容是不透明的二进制对象。消息在broker和client之间通过协议命令Basic.Publish及Basic.Deliver来传递。这两个命令都是异步的,所以当发生异常时,回应的消息会带有原来请求的命令。AMQP也提供了同步的消息传递命令Basic.Get/Get-Ok。

 

包含有因无路由而不能交换或者队列拒绝接收(队列已满)的错误信息发生时,broker可以被配置为通过不同的方式来处理异常。例如,将相关消息送往某个专用队列,或者仅仅粗暴的停止broker,等等。

 

开发

 

AMQP由JPMorgan自2004年中期至2006年中期独自开发。IMatix公司也开发了C/C++和java的实现。两家公司将这个协议文档化并且规范了互操作性,发起成立专门的工作组,成员有Red Hat, Cisco Systems, TWIST, IONA, iMatix等。及至2009年11月,工作组成员有:Bank of America, Barclays, Cisco Systems, Credit Suisse, Deutsche B?rse Systems, Envoy Technologies, Inc., Goldman Sachs, Progress Software, iMatix Corporation, JPMorgan Chase Bank Inc. N.A, Microsoft Corporation, Novell, Rabbit Technologies Ltd., Red Hat, Inc., Solace Systems, Tervela Inc., TWIST Process Innovations ltd, WS02 ,29West Inc.

 

AMQP的首要设计目标是为企业组织内部及其相互之间提供一个可以与既有的其他开放标准商业事务消息规范如FpML等通用协议进行互通,可作为SOAP可靠传输层的开放式标准的协议栈。

 

AMQP初始只是面向金融服务领域,但已经扩展为广泛通用的消息中间件应用。

 

AMQP模型

 

AMQP定义了一些实体。从连接的视角来看,强制实现的如下:

消息broker:AMQ客户端连接的服务器。可以集群方式运行,但这个由具体实现自行决定,并未涵盖在规范中。

用户:用户也是一个实体,可提供密码等认证机制来接入到broker,也可不经认证直接接入。

连接:物理的连接,如使用TCP/IP,SCTP等。连接是与用户绑定的。

通道:绑定到物理连接的逻辑信道。因此,经由通道的通信是有状态的。客户端在一个连接上提供并发操作应该为每一类分别提供单独的通道。例如,采用线程并发模型的客户端,可以声明thread-local变量来封装一个通道。

 

用来实际发送或者接收消息的实体都在同一个通道上声明,此声明确通知客户端该实体存在(或者之前已被其他客户端声明)。任何试图用不同的属性声明已声明的具名实体都将引发错误。为了改变此类实体的属性则必须先进行删除。

 

一些实体是具名的。他们的名字必须在整个他所在的broker中具有唯一性。因为客户端通常无法获取所有具名实体的列表(AMQP并未定义此类操作),所以如何确保实体的名字唯一就是客户端的问题了。

 

实体名字以UTF-8编码,长度必须介于1至255个字符且以数字、字母或者下划线开始。

 

交换器

交换器是消息送达的实体。他是具名的,其类型也就是属性可以是:

passive:交换器不在事先被声明,如果其不存在将抛出错误。

durable:该交换器将在broker重启后生效。

auto-delete:该交换器将在没有消息队列绑定时自动删除。一个从未绑定任何队列的交换器不会自动删除。

 

注意:AMQP 1.0规范将定义可移除的交换器。

 

队列

队列是接收消息的实体,具有名字和属性,但没有类型。客户端可以订阅队列以便使broker递送某消息队列的内容到该客户端。另,客户端也可自动到队列取他所感兴趣的消息。

 

消息确保以它被送往队列时的顺序分发。但在进行某些重新路由的操作如失效处理时,其顺序则不能保证。

 

队列的属性有:

alternate-exchange:当消息被订阅者拒绝或者由于队列被删除而孤立时则被送往此交换器,同时队列中的该消息被删除。

passive:当队列不存在时会抛出一个错误信息,仍然不会被声明。

durable:队列将在broker重启时启动。

exclusive:队列仅服务于一个客户端。

auto-delete:队列在没有活跃订阅者的时候将自动删除。这个类似于具有auto-delete属性的交换器:如果队列上从未有活动的订阅者则不会自动删除。当客户端终结时,exclusive类型的队列则一定会自动删除。

 

注意:AMQP 1.0中,队列将替代交换器。

 

消息

消息是不具名的。它被发布到交换器。它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成:

routing-key:该域的使用取决于交换器的类型。

immediate:如果至少一个队列可以接收,但却没有订阅者,则该消息将被当作无路由进行处理。

delivery-mode:指出该消息可能需要持久性存储。broker仅对此类消息在被消费前进行最大能力的防丢失措施。如果不能确定broker终结时消息是否投递成功则可能会发生消息被多次投递的情况。不具有这个属性的消息则不会如此。

priority:相对于其他消息的优先权,范围0至9.

expiration:消息在被broker当作不可路由处理前的存续时间,以毫秒为单位。

 

绑定

绑定是队列和交换器之间的关系,规定消息如何由交换器到队列。绑定的属性被交换器用来与路由算法匹配。绑定和交换器算法可组合形成各种情形:

Unconditional:绑定无任何属性,交换器请求所有的消息。

Conditional on a fixed string:绑定有一个属性routingkey,请求所有与此标识相符的消息。

Conditional on a pattern match:绑定有一个属性routingkey,请求所有与此标识的模式匹配的消息。可以使用通配符。AMQP实现了主题匹配模式。

Conditional on multiple fixed strings:绑定有一个属性表,请求所有与各个表项匹配的消息。各表项的条件可以是与、或。

Conditional on multiple patterns:绑定有一个属性表,请求所有与各个表项的模式匹配的消息。

Conditional on algorithmic comparison:绑定有一个算术表达式(类似SQL的SELECT WHERE语句),请求所有头部匹配此表达式的消息。

Conditional on content inspection:绑定指定通配符,请求所有消息实际内容与此条件相符的消息。

 

注意:这些并非全部是标准,取决于具体实现。

 

交换类型及对绑定的影响

 

以上4个实体形成了AMQP的基本模型。理解消息如何传递到队列的关键在于交换器的类型与路由关键字之间的关系。

 

当一个消息的路由关键字与绑定中的模式匹配时,交换器会把该消息的拷贝送达队列。如何进行匹配仅依赖于交换器的类型:

direct型:消息的路由关键字与绑定相同。

fanout型:总是匹配,即使绑定无关键字。

topic型:匹配路由关键字属性,字符串的各个部分以'.'分隔。可包含两个特殊字符:'*'表示单个任意词,'#'表示0个或多个词,例如 *.stock.# 匹配usd.stock和eur.stock.db,但不匹配stock.nasdaq。

headers型:匹配各个键-值对的逻辑组合结果。

 

其它由供应商自定义的交换器也被允许。

 

命名队列到命名交换器的绑定具有强大的属性——通过绑定使得这两个实体相互独立。例如,可以将同一个队列通过多个绑定连接到同一个或者多个交换器上。或者,多个消费者可以以相同的参数绑定到同一个队列上,这样每个消费者仅能得到其他消费者没有消费的消息。或者,多个消费者可以声明各自独立的队列但共享同一个绑定,如此,每个消费者都将得到与其他消费者相同的消息。

 

AMQP规范修订及其未来的发展

 

已经发布的规范版本如下:

0-8 in June 2006

0-9 in December 2006

0-10 (documents are undated)

0-9-1 in November 2008

1.0 draft (document is undated)

 

AMQP 1.0规范草案改变了AMQP的模型:移除交换器和绑定的概念,代之以队列和链接。这变将导致2个问题:

1. 发布者需要知道接收者的拓扑,即何种交换器及其类型;

2. 生产者的流控:如果一个交换器对两个不同的队列进行路由,其中一个空闲而另一个近乎满载,那么如何流控进行呢?

 

其他改变还包括类似Email和XMPP的队列地址模式。这将使得地址类型成为一等实体,允许发布者使用DNS来定位服务器。

 

实现

 

以下是一些可以公共获得的AMQP实现:

OpenAMQ

Apache Qpid

RedHat Enterprise MRG

RabbitMQ

AMQP Infrastructure

ZeroMQ

Zyre

 

相类似的规范

 

以下是一些与AMQP相同或类似的已知规范:

Stomp

RestMS

XMPP

OpenWire

 

目前还没有关于它们在同一应用上的对比。但是JMS常被用来与AMQP对比,JMS是一个API规范,不能保证与其它实现的互操作性,这就导致服务器和客户端必须由同一供应商提供。而AMQP则没有标准API,就像HTTP和XMPP等。

 

 

引用参考

略

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kombu------python的消息库 kombu是一个python的消息库。 Kombu的目标是通过为AMQP协议提供一个地道的高层次接口,来使python中的消息编程更为简单。同时也为通用的消息问题提供试验和测试的解决方案。 AMQP是先进的消息队列协议,一个提供消息定位,队列,路由,高靠性和安全性的开放的标准协议,其中RabbitMQ消息服务是一个流行的实现。 特性 通过可扩展的通道允许应用程序支持多种消息 阅读详情

相关推荐

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

AMQP协议详解

AMQP协议详解

骑个小蜗牛的博客 2万+

洛谷P5707 【深基2.例12】上学迟到(c语言)

第一篇题解 题目描述 yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。 输入格式 两个正整数 s,v,意思已经在题目中给定

cc_love_program的博客 1万+

RabbitMQ学习(八)之spring-amqp的重要类的认识

转载来自http://blog.youkuaiyun.com/zhu_tianwei/article/details/40889435 对于大多数应用来说都做了与spring整合,对于rabbitmq来说。也有与spring的整合。可能通过spring的官网找到spring-amqp项目下载。spring-amqp项目包括三个子项目:spring-amqp、spring-erlang、spring-r

蜗牛慢爬着的博客 4537

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ&lt;1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标

YOLOv8改进是一种先进的目标检测算法,通过引入辅助超推理算法SAHI推理,使得小目标无法逃避检测。SAHI推理算法结合视频和图片的特点,利用先进的超推理技术,提高了目标检测的准确性和鲁棒性。不仅如此,YOLOv8改进还支持对视频和图片进行实时的目标检测,将检测结果直观地呈现给用户。这一技术的应用范围广泛,可以用于安防领域,提升监控设备的性能和效率;也可以用于无人驾驶领域,实现精准的目标识别和跟踪。总之,YOLOv8改进是一项具有突破性的技术,为目标检测领域带来了重大的进展。

weixin_51988935的博客 806

RabbitMq中的exclusive

RabbitMq中真正处理消息是队列,自然exclusive也只对队列生效。 声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除(可以参考RabbitMq中的autoDelete)。 有三点需要额外注意: 针对连接可见,只要是当前connection下的信道都可以访问 一旦该队列被声明,其他连接无法声明相同名称的排他队列。 队列即使显示声明为durable,连接...

Lvlht的博客 8761

tar解压报错 gzip: stdin: unexpected end of file tar: Unexpected EOF in archive

错误现象: [root@centos7-xinsz08 ~]# tar xf prometheus-2.7.2.linux-amd64.tar.gz gzip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable: exiting now 错误原因排查 ...

互联网老辛 2万+

深入理解AMQP协议

深入理解AMQP协议 一、AMQP 是什么 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 二、AMQP模型 工作过程 发布者(Publisher)发布消息(Message),经由交换机(Exchange)。 交换机根据路由规则将收到的消息分发给与该交换机绑定的队列(Queue)。 最后 AMQP 代理会将消息...

kaven 2038

三臂杆大型液压机械臂集中式ADRC控制系统设计

本文设计了一种用于三臂杆液压机械臂的集中式自抗扰控制(ADRC)系统。该系统通过建立包含惯性矩阵、科氏力、重力及摩擦力的非线性动力学模型,并集成液压系统传递函数,构建了完整的系统模型。控制方案采用跟踪微分器安排过渡过程,扩张状态观测器实时估计系统状态和总扰动,以及非线性状态误差反馈生成控制量。MATLAB实现展示了集中式ADRC控制器的核心结构,包括参数定义、跟踪微分器、扩张状态观测器和非线性反馈模块的设计。该系统能有效处理多关节耦合效应,实现三输入三输出的MIMO控制,具有抗干扰能力强、响应速度快的特点。

huanghm88的专栏 269

高通camx hal进程dump日志分析四:Node DumpDebugInfo原理分析

摘要: 本文讲解了高通Camx架构中DumpDebugInfo的原理,重点分析了Node组件的DumpDebugInfo()方法。该方法会输出Node自身调试信息,并调用DumpFenceErrors()接口输出Fence错误信息。具体包括:检查请求队列状态、输出未完成请求的元数据/完成状态/未处理Fence数量等关键信息,以及Fence错误原因(如延迟、未触发、结果失败等)。通过代码注释详细解析了各字段含义,为后续分析Dump异常日志提供理论基础。

783

AMQP协议讲解

前言 学习AMQP协议,是为了学习rabbitMQ消息中间件打基础的。所以这里我们重点了解一下AQMP协议的组件和特性,而AMQP协议本身规范,数据结构等内容,不进行记录和讲解。作为java程序员,我们一般只使用AMQP服务器进行操作就足够了,很少接触AMQP最原生,最底层的东西。如果感兴趣,可以查阅AMQP官网:中文官网地址 一、总体介绍 1.什么是AMQP协议 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 它描述了在

敲代码的小小酥的博客 4103

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RPC机制之AMQP协议

openstack的RPC机制之AMQP协议一、openstack RPC通信Openstack 的主要组件有 Nova、Cinder、Neutron、Glance 等,分别负责云平台的计算、存储、网络资源管理。OpenStack 各组件之间是通过 REST 接口进行相互通信,而各组件内部则采用了RPC通信。1、什么是RPCRPC即Remote Procedure Call(...

weixin_34380948的博客 693

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

openstack的RPC机制之AMQP协议

openstack RPC通信Openstack 的主要组件有 Nova、Cinder、Neutron、Glance 等,分别负责云平台的计算、存储、网络资源管理。OpenStack 各组件之间是通过 REST 接口进行相互通信,而各组件内部则采用了RPC通信。什么是RPCRPC即Remote Procedure Call(远程方法调用),是Openstack中一种用来实现跨进程(或者跨机器)的通信

Flytiger 3558

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[转]AMQP,JMS和MOM

AMQP,JMS和MOM 暂无评论 今天在公司听关于JMS的session,再结合之前接触RabbitMQ了解到的知识,产生了一些困惑,这篇博客主要描述下困惑的原因以及理清后的结构。 首先,session中讲到JMS是一套JCP定义的协议,用于描述可供Java使用的消息API,总所周知,JCP定义的JSR只描述API接口及其行为,结合到我之前接触到的RabbitMQ中实现的AMQP协

luojianbinfen的专栏 866

rabbitmq & spring amqp

[b]My main AMQP post on blogger: [url]http://wuaner.blogspot.com/2012/10/messaging.html[/url][/b][code="c"] sudo rabbitmqctl add_user admin admin sudo rabbitmqctl set_permissions -p / admin ".*...

Wuaner的博客 206

ampq协议

mq的产品有很多种,这里发一些关于ampq协议的资料https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocolhttp://docs.oasis-open.org/amqp/core/v1.0/amqp-core-complete-v1.0.pdfhttps://www.amqp.org/...

890

分布式消息队列(消息中间件)

消息队列技术是分布式应用间交换信息的一种技术。有了它, 可以很方便快捷地实现各分布组件间的通讯和信息交换。  XMPP 和 AMQP 是两个开放的消息标准:Extensible Messaging and Presence Protocol (XMPP) 是基于可扩展标记语言(XML)的协议, 它用于即时消息(IM)以及状态显示(Presence) 支持AMQP的开源broker:

blade2001的专栏 1万+

消息中间| JAVA消息中间件概述

文章目录什么是中间件?什么是消息中间件?什么是Java消息服务(JMS)?什么是AMQP?JMS与AMQP对比?几种常见消息中间件ActiveMQRabbitMQKafka综合评价 什么是中间件? 中间件(英语:Middleware),又译中间件、中介层,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务...

YvesHe的专栏 1403

openstack学习之RPC

什么是RPC RPC即Remote Procedure Call(远程方法调用),是Openstack中一种用来实现跨进程(或者跨机器)的通信机制。Openstack中同项目内(如nova, neutron, cinder...)各服务(service)及通过RPC实现彼此间通信。Openstack中还有另外两种跨进程的通信方式:数据库和Rest API。 Openstack中

zhengleiguo的专栏 4996

openstack RPC通信

http://www.cnblogs.com/chenergougou/p/7056557.html openstack RPC通信 OpenStack 的主要组件有 Nova、Cinder、Neutron、Glance 等,分别负责云平台的计算、存储、网络资源管理。openstack 各组件之间是通过 REST 接口进行相互通信,而各组件内部则采用了RPC通信。 什么是RP

liukuan73的专栏 2079

RabbitMQ详解(一)------简介与安装

目录 1、安装 Erlang 2、安装 RabbitMQ 3、启动和关闭RabbitMQ   RabbitMQ 这个消息中间件,其实公司最近的项目中有用到,但是一直没有系统的整理,最近看完了《RabbitMQ实战 高效部署分布式消息队列》这本书,所以顺便写写。   那么关于 RabbitMQ 是什么?大家可以首先参考官网:http://www.rabbitmq.com。这里我大概的介绍一下:   RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Moz...

337

大话openstack之RPC

openstack中的api使用规则 如果是跨项目的调用(如nova调用keystone,glance,cinder等),使用rest api(通过相应的python-XXXclient库)。   安装nova时需要依赖python-cinderclient python-neutronclien python-glanceclient python-keystoneclient,因为n...

chenyingko的专栏 324
上一篇: CTM R9 notes: Key Functionality
下一篇: 用msvc2010编译QT 4.7.0
BlueEngine
博客等级 码龄25年 8粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值