Openstack 的 RPC使用。
大家都已经很熟悉了RPC了。 比如说nfs就是采用的RPC通信。
尤其SUN RPC 已经成为了C语言开发的经典一种进程间调用机制。
openstack 的RPC 机制, 是基于AMQP 活着其他高级消息协议而实现得远程调用机制。
而oslo.messaging 在这些消息协议基础上实现了很nice的接口。developer 可以很方便的调用。
参考 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使用。的更多相关文章
- 模仿OpenStack写自己的RPC
在openstack中使用两种通信方式,一种是Restful API,另一种是远程过程调用RPC.本片文章主要讲解openstack中RPC的使用方式,以及如何在我们自己的架构中使用RPC. 在我前面 ...
- OpenStack三个节点icehouse-gre模式部署
一.环境准备 1.架构 创建3台虚拟机,分别作为controll节点.network节点和compute1节点. Controller节点:1processor,2G memory,5G storag ...
- openstack排错
一.排错方法: 1.查看日志路径为/var/log,具体哪个组件出了问题进入其目录查看. 2.debug root@sc-ctrl01:~# keystone --debug user-list ro ...
- Openstack:ice-house安装过程
#apt-get install ntpdpkg-reconfigure tzdata --> Asia -->Shuanghai #apt-get install python-mysq ...
- 【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 ...
- openstack grizzly版network网络节点安装
版本以及源的配置和控制节点一致 1.安装完操作系统已经apt源配置完成之后,一定要执行 apt-get update root@cloud:~# mv /etc/apt/sources.list /e ...
- openstack grizzly版cloud控制节点安装
openstack-ubuntu-create 参考官方文档 三个节点:cloud :控制节点内网:10.10.10.10外网:172.16.56.252 network:网络节点内网:10.10.1 ...
- 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- CentOS6.6部署OpenStack Havana(Nova-Network版)
CentOS6.4部署OpenStack Havana(Nova-Network版) 一 基本设备介绍 测试环境 CentOS6.4 x64 OpenStack 服务 介绍 计算 (Compute) ...
随机推荐
- bootstrap简章
系统整理一遍bootstrap 的东西 1/ 设置页面为H5文档类型 <!DOCTYPE html> <html lang="zh-CN"> ... &l ...
- cURL模拟POST方法提交XML数据并解析
php编程中会用到xml格式传送数据,这里演示下php以post形式发送xml,服务器接收,并解析xml的过程! post_xml.php源码: <?php header("Conte ...
- python 网络编程第四版
使用SocketServer 模块来完成服务端编程 1.服务端代码如下: #!/usr/bin/python #!coding:utf-8 import SocketServer as sockets ...
- MFC的规则DLL中资源使用的问题
今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体.然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常 ...
- spring MVC通过json与前台交互
这里用的是spring4.1.4,jquery2.1.3,其它环境为:myeclipse2014,tomcat7,jdk7 首先,新建一个web工程,并导入springMVC的jar包(为了方便起见我 ...
- 文件上传与下载/Mail
文件上传与下载 提交方式:post 表单中要有文件上传的表单项 input type=”file”而且必须有name属性 表单类型要加入 encytype=”mulitpart/form-data” ...
- MySQL常用指令
1.win下启动MySQL 命令行下输入: mysql –h localhost –u root -p / mysql -uroot -p 2.MySql下建表 输入命令 show database ...
- js访问 xmldom
加载XML文档: var xmlDom = new ActiveXObject("MSXML2.DOMDocument"); xmlDom.load("file ...
- leetcode Binary Tree Paths python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...
- Highcharts使用手册
chart: { type: 'area', ignoreHiddenSeries: false, //如果true,一旦一个系列被隐藏,轴将会扩展剩余的可见系列 }, 这是设置的两个纵坐标轴: yA ...