大家都已经很熟悉了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. 在Google map图上做标记,并把标记相连接

    <!DOCTYPE html> <html> <head> <title>GeoLocation</title> <meta name ...

  2. [C语言练习]万年历加强版

    /** * @copyright 2011 Chunhui Wang * * wangchunhui@wangchunhui.cn */ #include<stdio.h> int mai ...

  3. [Node.js]expressjs简单测试连接mysql

    下载好node.js和通过npm安装好express.js后,先写package.json { "name": "application-name", &quo ...

  4. Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good

    Windows是一个基于消息驱动的系统,因此,在很多时候,我们需要截获一些消息然后自己进行处理.而VCL系统又有一些特定的消息.下面对我所了解的delphi环境中截获消息进行一些总结.      就个 ...

  5. node.js介绍

    官网说明: Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable ...

  6. 克鲁斯卡尔(Kruskal)算法

    # include <stdio.h> # define MAX_VERTEXES //最大顶点数 # define MAXEDGE //边集数组最大值 # define INFINITY ...

  7. Java 可中断线程

    PART.1 无法中断的线程 一个无法中断的线程的例子. public class UninterruptableThread { @SuppressWarnings("deprecatio ...

  8. sql日志损坏造成数据库置疑解决办法

    --如果确定是日志损坏造成,请用下面的方法恢复日志文件.--第一步--use mastergo sp_configure 'allow updates', 1reconfigure with over ...

  9. SQL SERVER中变量的定义、赋值与使用

      本文面向对SQL SERVER中变量操作不熟悉的用户,希望能使他们在看完本文后能对变量操作有具体和全面的认识.   在学习SQL SERVER的过程中,很多时候需要对某些单独的值进行调试,这时就需 ...

  10. android笔试题

    1.请谈一下Android系统的架构. 答:Android系统采用了分层架构,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层.   2.谈谈android大众常用的五种布 ...