消息队列服务

1.消息队列AMQP

AMQP是--种标准化的消息中间件协议,全称为高级消息队列协议,它可以让不同语言、不同系统的应用互相通信,并提供一个简单统--的模型和编程接口。这样,就可以采用各种语言和平台来实现自身的应用,当需要和其他系统通信时,只要承认AMQP即可。
AMQP.png

消息队列服务.png

AMQP消息传递示意图
消息传递.jpg

AMQP中有3个重要的角色:

Publish:消息的发送者
Exchange:消息的传递者
Consumer:消息的接收者

2、QPID消息服务

QPID是Apache开发的一款面向对象的消息中间件,它是AMQP中的一种,可以和其他符合AMQP的系统进行通信。QPID提供了C++/python/Java/C#等主流编程语言的客户端库,安装使用非常方便。除了符合AMQP基本要求外,QPID提供了很多额外的特性,非常适合集群环境下的消息通信。

QPID架构图
QPID架构图.png

QPID有如下几种命令行工具

qpid-config:显示配置、队列和绑定等信息。
qpid-tool: 配置工具,通过配置可以控制Broker端。
qpid-queue-stats:显示队列信息和队列中的数据情况。
qpid-cluster:配置和查看集群。

3、OpenStack消息服务

OpenStack采用AMQP作为它的消息传递技术。AMQP的控制端,不管是RabbitMQ还是QPID,它的作用都是允许任何两个相同组件以松散耦合的方式进行交流。更准确地说,OpenStack的组件均可以使用远程呼叫机制(RPC)进行彼此沟通。

好处.png

OpenStack在消息传递过程中常用对象:

Topic Publisher:该对象在进行rpc.call或rpc.cast调用时创建,每个对象都会连接同一个topic类型的交换器,消息发送完毕后对象被回收。

Direct Publisher:该对象在进行rpc.call调用时创建,用于向消息发送者返回响应。该对象会根据接收到的消息属性连接一个direct类型的交换器。

Direct Consumer:该对象在进行rpc.call调用时创建,用于接收响应消息。每一个对象都会通过一个队列连接一个direct类型的交换器。

Topic Consumer:该对象在内部服务初始化时创建,在服务过程中一直存在。用于从队列中接收消息,调用消息属性中指定的函数。该对象通过一个共享队列或一个私有队列连接一个topic类型的交换器。每一个内部服务都有两个Topic Consumer,一个用于rpc.cast调用,另一个用于rpc.call调用。

Topic Exchange:topic类型交换器,每一个消息代理节点只有一个topic类型的交换器。

Direct Exchange:direct类型的交换器,存在于rpc.call调用过程中,对于每一个rpc.call调用,都会产生该对象的一个实例。

Queue Element:消息队列。可以共享也可以私有。Routingkey为“topic”的队列会在相同类型的服务中共享。

云平台中常用的消息队列服务有哪些?

RabbitMQ或ActiveMQ这两个消息队列服务比较常用

ActiveMQ在CentOS6.5系统中比较常用,RabbitMQ在CentOS7.2中比较常用
消息队列服务是如何工作的呢?

客户端连接到消息队列服务器,打开一个channel

客户端声明一个exchange并设置相关属性

客户端声明一个queue并设置相关属性

客户端使用routing key 在exchange和queue之间建立好绑定关系

客户端投递消息到exchange,exchange接收到消息后,就根据消息的key和已经设置的binding进行消息路由,将消息投递到一个或多个队列里

Rabbit模式大概分为以下三种:单主机模式、普通集群模式、镜像集群模式。

作业:

Keystone 命令作业

1、创建项目Project_姓名

openstack project create --domain default Project_haoyingming

2、将为用户User_学号_01 在项目Project_姓名中添加角色Role_学号

openstack role add –-project Project_haoyingming --user User_36_01 Role_36

3、将用户User_学号_01、User_学号_02 、User_学号_03添加到用户组User_姓名中(该用户组不存在)

openstack group add user User_haoyingming User_36_01 User_36_02 User_36_03

4、删除用户User_学号_03

openstack user delete User_36_03

问答作业

1、云平台中常用的消息队列服务有哪些?

RabbitMQ或ActiveMQ这两个消息队列服务比较常用

2、消息队列服务是如何工作的?

客户端连接到消息队列服务器,打开一个channel
客户端声明一个exchange并设置相关属性
客户端声明一个queue并设置相关属性
客户端使用routing key 在exchange和queue之间建立好绑定关系
客户端投递消息到exchange,exchange接收到消息后,就根据消息的key和已经设置的binding进行消息路由,将消息投递到一个或多个队列里

Last modification:March 27th, 2020 at 09:13 am
如果觉得我的文章对你有用,请随意赞赏