Openstack 中的消息总线 & AMQP
目录
消息总线
Openstack 采用了面向服务的开发模式(有别于面向对象和面向过程),需要我们去考虑各个服务之间和各项目之间是如何传递消息的。
- Restful API:项目之间的通信。
- 消息总线:项目内部的服务之间的通信。
使用这种架构模式的好处在于:保证了各个项目对外提供服务的 API 接口可以被不同的客户端类型所调用。即,只要可以调用这个 API 接口,那么 Client 是使用什么技术来实现,Service 都不会受到影响,也不需要作出改变。Server 和 Client 做到了模块化的分离。除此之外,还能够保证项目内部通信接口的可扩展性和可靠性,可以支持大规模的部署。
消息总线:可以实现一些服务向总线发送信息,其他的服务从总线上获取消息的效果。就类似于回转寿司的回转带,所有人都可以往回转带上放寿司和取寿司,这样的话只需要有足够的位置,就能够随时加入或减少客人,而且并不会影响整个寿司店的运作。
消息总线的原理
项目内部各服务进程之间的通信使用了:oslo.messaging库所提供的函数方法。同时还需要以下两种技术作为支撑。
远程过程调用 RPC:一个服务进程可以调用其他远程服务进程的方法。调用的方式:
call():远程方法会被同步执行,调用者会被阻塞直到返回方法的结果,在一些调用时间较长的场合中使用会对效率又很大的影响。( call() 调用的远程服务的方法会被马上执行,在执行的过程中还会把调用者的进程阻塞掉,知道返回结果为止。)
cast():远程服务的方法会被异步执行,调用者不会被阻塞,结果也无须立即返回,可以在一个合适的时机(人为干预)去执行并返回结果。所以也要求调用者利用其他的方法来查询这次远程调用的结果。
事件通知:某一个服务进程将事件通知发送到消息总线上,所有在消息总线上且对该事件通知感兴趣的服务进程都可以将该事件通知获取并进行处理,执行的结果并不需要返回给事件发送者。这种方式不仅可以在项目组件内部的进程服务通信间实现,还可以在项目之间的通信中实现(EG. Ceilometer)。
AMQP
AMQP高级消息队列协议:是一个基于应用层的,用于异步消息传递的协议规范。其功能包括了: 消息的导向/ 消息的队列/ 消息的路由/ 消息的可靠性/ 消息的安全性。不同的AMQP实现方式之间可以通过定义消息在网络上传输时的字节流格式来进行互相操作。
在一个实现了 AMQP协议 的中间件消息队列服务中,如:RabbitMQ。当由生产者发出的不同的消息被发送到 RabbitMQ Server 中的 Queue 时,RabbitMQ 会根据不同的条件把 Queue 中的请发传递给不同的消费者。如果消费者无法接收,那么这个消息,就会自动的把消息缓存在内存或者磁盘中。这些操作是由 RebbitMQ 中的 Exchange 和 Queue 来实现的( Exchange或Queue的数量不定 ):
Excange(信息交换):决定了消息的路由转发,根据接收到的消息中的 Info (从消息属性/消息头/消息体中提取)来与绑定表匹配(消息的 routing key 和 Queue 的 binding key 匹配)以此来决定将消息转发到哪一个 Queue 中,然后消费者再从 Queue 中获取消息并进行处理。
Queue(消息队列):作为 消息存储 和 分发 实体,负责将消息缓存在内存或者磁盘中,并且按照一定的顺序将这些消息分发给一个或多个消费者。
注:Excange 负责将消息转发到 Queue 中,转发的判断依据是从消息中获取的routing key 与 Queue 中的 binding key 匹配结果。
Openstack 中的消息总线 & AMQP的更多相关文章
- 记一次有关spark动态资源分配和消息总线的爬坑经历
问题: 线上的spark thriftserver运行一段时间以后,ui的executor页面上显示大量的active task,但是从job页面看,并没有任务在跑.此外,由于在yarn mode下, ...
- JMS中的消息通信模型
1. MQ简介: 消息队列(Message Queue,简称MQ),是应用程序与应用程序之间的一种通信方法.应用程序通过发送和检索出入列队的针对应用程序的数据 - 消息来通信,而无需专用连接来链接它们 ...
- 探索 OpenStack 之(14):OpenStack 中 RabbitMQ 的使用
本文是 OpenStack 中的 RabbitMQ 使用研究 两部分中的第一部分,将介绍 RabbitMQ 的基本概念,即 RabbitMQ 是什么.第二部分将介绍其在 OpenStack 中的使用. ...
- 开源消息总线ActiveMQ
一.消息中间件MOM(Message-Oriented Middleware) 消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术.它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数 ...
- springcloud(九):配置中心和消息总线(配置中心终结版)
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版
前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...
- SpringCloud基于消息总线的配置中心
@https://www.cnblogs.com/ityouknow/p/6931958.html Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点 ...
- SpringCloud消息总线
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- springcloud 入门 9 (消息总线)
Spring cloud bus: Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spring bus的一个核心思想是通 ...
随机推荐
- ceph命令拷屏
常用命令ceph -w ceph df ceph features ceph fs ls ceph fs status ceph fsid ceph health ceph -s ceph statu ...
- python requests方法post请求json格式处理
方法如下: import requestsimport json data = { 'a': 123, 'b': 456} ## headers中添加上content-type这个参数,指 ...
- Tomcat负载均衡、调优核心应用进阶学习笔记(一):tomcat文件目录、页面、架构组件详解、tomcat运行方式、组件介绍、tomcat管理
文章目录 tomcat文件目录 bin conf lib logs temp webapps work 页面 架构组件详解 tomcat运行方式 组件介绍 tomcat管理 tomcat文件目录 ➜ ...
- shell 读取配置文件的用法
https://blog.csdn.net/qq_36684665/article/details/81134179 亲测有用!
- ldap认证服务的搭建
1. Ldap服务介绍 LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议.目录是一个特 ...
- Spring Cloud服务安全连接
Spring Cloud可以增加HTTP Basic认证来增加服务连接的安全性. 1.加入security启动器 在maven配置文件中加入Spring Boot的security启动器. <d ...
- flex属性设置
flex是一个复合属性,所以有三个值设置,这也就造成了flex可以只设置一个值或两个值: 如果flex只设置一个值: 没有单位的数,则这个值是flex-grow, 并且flex-basis变为0 有单 ...
- docker--build base image
通过dockerfile build一个base image,在上面运行一个c程序 首先 1.创建一个目录. 2.然后创建一个c写的小程序,并且gcc编译好. 3.创建一个Dockerfile FRO ...
- 使用postman请求响应Invalid CORS request
响应结果 解决方法: 下载之后解压,在Chrome浏览器,打开扩展 chrome://extensions/ 点击“加载已解压的扩展程序”添加我们解压的包,或者直接拖拽.之后我们就可以看到Postma ...
- RemoTing 搭建简单实现
今天对C# Remoting进行了初步的学习,废话不说... RemotingModel: Talker.cs using System;using System.Collections.Generi ...