消息队列与oslo_messaging实现原理

来源 :安家(建筑与工程)上旬刊 | 被引量 : 0次 | 上传用户:zeratel
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  中图分类号:TU 文献标识码:A 文章编号:(2021)-01-252
  前言
  OpenStack遵循这样的设计原则:项目之间通过 RESTful API 进行通信,项目内部,不同服务进程之间通过消息队列进行通信,通信的代码实现借由 oslo_messaging 库完成
  oslo_messaging 是对 Python 庫 kombu 的封装,kombu 是对 AMQP 的封装,所以在讨论 oslo_messaging 前有必要对 AMQP 进行说明
  AMQP
  Openstack 所支持的消息队列类型中,大部分都是基于AMQP,基于 AMQP 标准,有很多具体的实现,比如 OpenStack 默认的 RabbitMQ,Kafka 等,所以本文着重介绍 AMQP 的架构,RabbitMQ 架构与之类似
  架构图如下所示:
  在对上图进行说明之前需要先对其中的一些名词进行说明:
  ·Server/Broker:AMQP 的具体实现,如 RabbitMQ,Kafka
  ·Producer:生产者
  ·Consumer:消费者
  ·Virtual Host:虚拟主机,一个 broker 里可以有多个 vhost,用作不同用户的权限分离
  ·Exchange:接收 Producers 发送过来的消息,按照一定规则转发到相应的 Message Queues 中
  ·Queue:将接收到的消息转发到相应的 Consumers
  ·Channel:消息通道,在客户端的每个连接里,可建立多个 Channel
  ·Routing Key:Exchange 根据这个关键字将消息转发至不同的 Queue
  流程说明:生产者将消息发送给 Exchange,由 Exchange 来决定消息的路由,即决定将消息发送到那个 Queue,然后消费者从 Queue 中取出消息,进行处理,至于 Exchange 将消息转发给哪一个 Queue,这将依赖于 Routing Key,每一个发送的消息都有一个 Routing Key,同样,每一个 Queue 也有一个 Binding Key,Exchange 在进行消息路由时,会查询每一个 Queue,如果某个 Queue 的 Binding Key 与某个消息的 Routing Key 匹配,这个消息会被转发到那个 Queue
  简单来说,Exchange 依据 Routing Key 进行匹配,将消息转发给匹配成功的 Message Queue,总共有三种匹配模式:
  ?1?Direct:Routing Key 为一字符串,匹配规则为全值匹配
  ?2?Topic:Routing Key 为由 . 分隔的一个个子串组成的字符串,匹配规则为模式匹配,具有两种通配符,星号 '*' 表示任意一个子字符串,井号,'#' 表示任意多个子字符串,Producer 发送的 Routing Key 没有通配符,Message Queue 绑定的 Routing Key 可以有通配符
  ?3?Fanout Exchange:广播,没有 Routing Key,所有绑定到 Fanout Exchange 的 Message Queue 都能收到来自 Producer 发送的消息
  Notifiy 与 oslo.messaging
  oslo.messaging 库通过以下两种方式来完成项目各个服务进程之间的通信
  ?1?远程过程调用(Remote Procedure Call,RPC)通过远程过程调用,一个服务进程可以调用其他远程服务进程的方法,并且有两种方法:call 和 cast,通过 call 的方式调用,远程方法会被同步执行,调用者会被阻塞直到结果返回,通过 cast 的方式调用,远程方法会被异步执行,结果不会立即返回,调用者也不会被阻塞,但是调用者需要用其他方式查询这次远程调用的结果
  ?2?事件通知(Event Notification)某个服务进程可以把事件通知发送到消息总线上,该消息总线上所有对此类事件感兴趣的服务进程,都可以获得此事件通知并进行进一步的处理,处理的结果并不会发送给事件发送者,这种通信方式,不但可以在同一个项目内部的各个服务进程之间发送通知,还可以实现跨项目之间的通知发送,Ceilometer 就通过这种方式大量获取其他 OpenStack 项目的事件通知,从而进行计量和监控
  编程实现
  1.创建连接 Channel
  2.创建队列,在队列中指明回调函数
  3.创建回调函数
  4.使用某一角色收发信息
  关于回调函数,为了保证数据不被丢失,RabbitMQ 支持消息确认机制,为了保证数据能被正确处理而不仅仅是被 Consumer 收到,那么我们不能采用 no-ack,而应该是在处理完数据之后发送 ack
  def process_media(body, message):
  print(' ')
  print(body)
  message.ack()
  OpenStack 组件发送消息的格式如下:
  {
  'message_id': six.text_type(uuid.uuid4()), #消息id号
  'publisher_id': 'compute.hos1',#发送者id
  'timestamp': timeutils.utcnow(),#时间戳
  'priority': 'WARN',#通知优先级
  'event_type': 'compute.create_instance', #通知类型
  'payload': {'instance_id': 12, ...} #通知内容
  }
  使用 Python 的测试代码如下:
  from kombu.entity import Queue
  from kombu.messaging import Consumer
  from kombu.connection import Connection
  # 处理消息
  def process_media(body, message):
  print(' ')
  print(body)
  message.ack()
  connection = Connection('amqp://openstack:[email protected]:5672//')
  queue = Queue('notifications.info', durable=False)
  with connection.Consumer(queues=[queue], callbacks=[process_media]) as consumer:
  while True:
  # 等待消息传入
  connection.drain_events()
  临沂大学 山东 临沂 276000
其他文献
摘要:经典阅读是汉语言文学教学中的重要内容,可以有效提高学生对经典内容的理解,培养学生对经典阅读的兴趣。然而,在网络时代背景下,随着电子市场以及电子书籍的发展,不仅改变了人们经典阅读的方式,同时也提高了人们获取信息的效率,这也就需要人们找出网络时代与经典阅读的有效结合点,以此提高经典阅读教学的有效性。基于此,本文从网络时代背景出发,对汉语言文学经典阅读进行了分析。  关键词:网络时代;汉语言文学;
期刊
摘要:当前阶段,铁路交通运输在国民经济运行期间占据着十分重要的地位,其决定了国民经济水平的提升。在最近几年中,伴随着我国对于交通运输行业的全面重视,其他形式的交通运输行业运行进程有所加快,此种现象直接限制了铁路运输的运行,并且因为被计划经济管理方式所影响,铁路交通运输经济管理意识较弱,对此,务必从经济管理方面入手,加强管理模式的改进和创新力度,以此达到铁路交通行业稳定的发展的目的。  关键词:市场
期刊
摘要:随着新课程改革的不断深入,信息技术与小学英语教学的结合愈发紧密,翻转课堂是信息技术与翻转教学相结合的产物,教师应当提高自身信息化教学能力,通过实施翻转课堂以提高英语教学质量。本文简单分析了小学英语教学中构建翻转课堂的积极意义,结合笔者实际教育工作经验,提出了构建完整课堂的有效策略以供参考。  关键词:翻转课堂;信息技术;小学英语  中图分类号:TU 文献标识码:A 文章编号:(2021)-0
期刊
摘要:随着社会经济的发展,金融工程的应用变得越来越广泛,比如说投资、贸易和现金管理等方面。金融工程在风险管理当中有着举足轻重的作用。但是金融工程还存在着一定的局限性,所以,相关人员需要全面分析金融工程在风险管理当中的应用。基于此,本文首先对金融工程的含义进行了介绍,其次对金融工程在风险管理中的优势分析进行了解,最后从四个方面对金融工程在风险管理中的运用进行了研究,提供相关人士交流参考。  关键词:
期刊
摘要:在大数据技术和移动互联网高速发展的今天,电商企业对于精准营销的建立和推动至关重要。制定合理有效的精准营销策略对每一个电商企业都有很强的现实意义,不仅能够迅速满足消费者日益增长的个性化需求,实现电商企业和消费者的有效营销,还可以保证营销的效率,提高消费者的忠诚度。在深入了解了消费者的行为模式后,便于电商企业提供更加个性化的服务,在提高经济效益的同时,还能树立可靠的企业形象,对未来实现长久稳固发
期刊
摘要:在实际生活,热能动力工程得到了认可,其在锅炉和能源方面的应用更是意义深远,能够从根本上杜绝有害气体的产生,进而避免了其对空气造成的污染,是保护环境的一剂良方。放眼未来,热能动力工程已经开始朝着控制工程以及热能动力方向大步迈进,为未来的能源发展奠定了基础。因此,我们应该对热能动力工程在锅炉和能源方面的发展状况加以重视,并不断对其进行探究,以此来造福人类。热能与动力工程在锅炉中应用广泛,其可有效
期刊
摘要:随着网络技术的不断发展,大数据云计算在数据的分析和处理等方面得到广泛应用。虽然大数据云计算技术提高了数据处理的效率,减少了处理数据时繁琐的程序,但同时存在较大的数据安全问题,对大数据云计算技术的安全性分析研究成为了当下最重要的课题之一。  關键词:大数据云计算;数据安全;分析与对策  中图分类号:TU 文献标识码:A 文章编号:(2021)-01-277  现代信息技术为人们的社会生活带来了
期刊
摘要:商务谈判的主要内容是价格、交货时间、付款方式和保修条款这四个项目,而价格因素是谈判的重点。价格谈判是商务谈判的核心内容,关系到商务谈判的成功与否。商务谈判的主要内容是价格,交货时间,付款方式和保修条款这四个项目,而价格因素是谈判的重点。在谈判中,报价是必不可少的核心环节。基于此,本文分析了国际商务谈判中报价的策略与应用,以此来供相关人士交流参考。  关键词:国际商务谈判;报价策略;应用  中
期刊
摘要:隨着传统的支付业务不断向互联网方向发展,人们在享受着互联网金融带来便利的同时,也需要充分考虑互联网金融可能存在的风险。从当前互联网金融的发展情况来看,虽然互联网能够极大地方便金融业务的开展,但是人们仍然需要注意防范存在的风险。因此本文以此为基础,从金融工程的角度出发探讨互联网金融管理中存在的风险,同时提出具体的对策建议,希望能够防范和化解互联网金融中的风险, 促进互联网金融更好更快地发展。 
期刊
摘要:在国际商务谈判中,文化障碍的存在增大了谈判的难度,同时也提升了谈判的不确定性。这要求企业在国际商务谈判中,充分了解文化差异,跨越不同国家的文化障碍,从而提升商务谈判效率。本文将重点探讨跨越企业国际商务谈判中文化障碍的策略,提升企业国际商务谈判效率。  关键词:国际商务谈判;文化障碍;文化差异  中图分类号:TU 文献标识码:A 文章编号:(2021)-01-254  企业国际商务谈判,主要是
期刊