大家都已经很熟悉了RPC了。 比如说nfs就是采用的RPC通信。

尤其SUN RPC 已经成为了C语言开发的经典一种进程间调用机制。

openstack 的RPC 机制, 是基于AMQP 活着其他高级消息协议而实现得远程调用机制。

而oslo.messaging 在这些消息协议基础上实现了很nice的接口。developer 可以很方便的调用。

oslo messaging wiki

参考 openstack的developer手册,实现一个RPC 的server端。

http://docs.openstack.org/developer/oslo.messaging/server.html

call_server.py

 from oslo_config import cfg
import oslo_messaging class ServerControlEndpoint(object): target = oslo_messaging.Target(namespace='control',
version='2.0') def __init__(self, server):
print "this is ServerControlEndpoint"
self.server = server def stop(self, ctx):
if server:
self.server.stop() class TestEndpoint(object): def test(self, ctx, arg):
print "this is TestEndpoint test server"
return arg transport = oslo_messaging.get_transport(cfg.CONF) print "cfg.CONF: ", cfg.CONF
print "transport: ", transport
target = oslo_messaging.Target(topic='test', server='server1')
print "target: ", target
endpoints = [
ServerControlEndpoint(None),
TestEndpoint(),
]
server = oslo_messaging.get_rpc_server(transport, target, endpoints,
executor='blocking')
print "server: ", server
server.start()
server.wait()

执行, 等待client 调用。

$ python call_server.py

实现一个 RPC的client端

http://docs.openstack.org/developer/oslo.messaging/rpcclient.html

call_client.py

 from oslo_config import cfg
import oslo_messaging as messaging transport = messaging.get_transport(cfg.CONF)
target = messaging.Target(topic='test') #, version='2.0')
client = messaging.RPCClient(transport, target)
print client.call({}, 'test', arg="hello")
cctxt = client.prepare() # version='2.0')
print cctxt.call({}, 'test', arg="hello")

执行,可以得到 server段的返回结果。

$ python call_server.py

notifier.py

http://docs.openstack.org/developer/oslo.messaging/notifier.html

notification_listener.py

http://docs.openstack.org/developer/oslo.messaging/notification_listener.html

Openstack 的 RPC使用。的更多相关文章

  1. 模仿OpenStack写自己的RPC

    在openstack中使用两种通信方式,一种是Restful API,另一种是远程过程调用RPC.本片文章主要讲解openstack中RPC的使用方式,以及如何在我们自己的架构中使用RPC. 在我前面 ...

  2. OpenStack三个节点icehouse-gre模式部署

    一.环境准备 1.架构 创建3台虚拟机,分别作为controll节点.network节点和compute1节点. Controller节点:1processor,2G memory,5G storag ...

  3. openstack排错

    一.排错方法: 1.查看日志路径为/var/log,具体哪个组件出了问题进入其目录查看. 2.debug root@sc-ctrl01:~# keystone --debug user-list ro ...

  4. Openstack:ice-house安装过程

    #apt-get install ntpdpkg-reconfigure tzdata --> Asia -->Shuanghai #apt-get install python-mysq ...

  5. 【openstack报错】【因更新包而致】IncompatibleObjectVersion: Version 1.9 of Instance is not supported

    [时间]2014年2月18日 [平台]ubuntu 12.04.3 openstack havana [日志]/var/log/upstart/nova-compute.log  内容如下: ERRO ...

  6. openstack grizzly版network网络节点安装

    版本以及源的配置和控制节点一致 1.安装完操作系统已经apt源配置完成之后,一定要执行 apt-get update root@cloud:~# mv /etc/apt/sources.list /e ...

  7. openstack grizzly版cloud控制节点安装

    openstack-ubuntu-create 参考官方文档 三个节点:cloud :控制节点内网:10.10.10.10外网:172.16.56.252 network:网络节点内网:10.10.1 ...

  8. 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  9. CentOS6.6部署OpenStack Havana(Nova-Network版)

    CentOS6.4部署OpenStack Havana(Nova-Network版) 一 基本设备介绍 测试环境 CentOS6.4 x64 OpenStack 服务 介绍 计算 (Compute) ...

随机推荐

  1. 搭建lamp环境Q&A

    Q1:no acceptable C compiler found in $PATH A:yum -y install gcc Q2:红帽没有注册,无法使用yum A:vim /etc/yum.rep ...

  2. skynet的流程1

    logpath = "."harbor = 1address = "127.0.0.1:2526"master = "127.0.0.1:2013&q ...

  3. JQuery DataTables Editor---页面内容修改&&数据库信息修改 (2)

    接上篇博文,详细说一下js代码以及JQuery DataTables Editor---页面内容修改&&数据库信息修改遇到的问题和解决办法. 1.关于dialog 初始化: $(&qu ...

  4. Linux05--Shell程序设计01

    1.Shell脚本介绍 基本介绍: shell脚本是一个可执行的纯文本文件,由多个shell命令组成. 命令的执行是从上而下,从左而右的分析和执行 命令,参数间的多个空白也会被忽略 #是注释 #!用于 ...

  5. 编绎报错,解决方法objc_msgSend too many arguments to function call,expected 0, have3 (转)

      编绎报错,objc_msgSend too many arguments to function call,expected 0, have3 解决方法:    

  6. Ignatius and the Princess II(全排列)

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  7. 13-7-1 做了一个360优化大师的主页(就是一个主页UI)

    模仿360优化大师做了一个下它的首页.   代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...

  8. bootstrap注意事项(五)表单

    1.基本实例 单独的表单控件会被自动赋予一些全局样式.所有设置了 .form-control类的 <input>.<textarea> 和 <select> 元素都 ...

  9. iOS根据2个经纬度计算距离

    #pragma mark - calculate distance 根据2个经纬度计算距离 #define PI 3.14159265358979323 +(double) CalculationDi ...

  10. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...