介绍
当谈到发送和接收应用程序和流程之间的消息,有 很多解决方案,您可以选择。他们都有自己的优点和缺点,因此,最好的做法是交叉检查您的要求,并与各种可用的解决方案相匹配。 Apache的Qpid是一个实现了高级消息队列协议(AMQP),以帮助您解决您的部署栈的不同元素之间先进的信息需求开源邮件系统之一。消息传递,消息代理和队列
消息传递是在进程,应用程序和服务器(虚拟和物理)之间交换某些数据的一种方式。这些消息交换,有助于某些工程需要,可以包括从纯文本消息到二进制数据的块,以满足不同的需求。对于这项工作,由第三方程序(中间件)管理的接口需要- 欢迎辞经纪人 。 消息代理通常是具有覆盖交换设置的每个阶段的专用部分的应用栈。从接受邮件排队它,并将其传递给请求方,经纪人处理了通常与非专用解决方案或简单的 黑客攻击 ,例如使用一个数据库,cron作业等,他们只是更难或麻烦做义务通过处理在技术上构成无限缓冲器的队列,将消息放入并且随后弹出并递送以自动地或通过轮询来处理。为什么要使用它们?
这些消息欺骗解决方案就像一个中间人用于各种服务(例如您的Web应用程序)。它们可以用于大大减少Web应用程序服务器的负载和传递时间,因为通常需要花费相当多的时间进行处理的任务可以委托给其唯一的工作是执行它们(即工作者)的第三方。当需要更多的“保证”持久性来将信息从一个地方传递到另一个地方时,它们也会派上用场。什么时候使用?
都放在一起,核心功能说明扩展为涵盖的区域众多, 包括-但并非限定到 :- 允许Web服务器快速响应请求,而不是强制在现场执行资源匮乏的过程
- 将消息分发给多个收件人以供消费(即处理)
- 让离线方(例如,断开连接的用户)稍后提取数据,而不是使其永久丢失
- 向后端系统引入完全异步的功能
- 订购和优先级任务
- 平衡工人之间的负载
- 大大提高应用程序的可靠性和正常运行时间
- 以及更多。
Apache Qpid
Apache Software Foundation在消息传递方面有几个解决方案,其中之一是Apache Qpid:基础的AMQP实现。与一些更基本的应用程序,旨在帮助开发人员制定自己的解决方案,Qpid,类似于RabbitMQ,提供了一个很好的工具集能够排队,安全和事务管理,集群,持久性通过可插拔层和更多。它的API默认支持多种编程语言,它包含C ++(用于Perl,Python,Ruby,.NET等)和Java(JMS API)代理。除了RabbitMQ,Qpid可能是最受欢迎的选择。它与其他人有什么不同?
完全成熟的消息代理仅在表面上略有不同。然而,深入研究内部结构揭示了事情如何工作的真相。以下是使Apache Qpid与其他人相比更突出的特性:- 客户端故障转移检测和通过连接到不同的代理自动修复
- 通过复制不同服务器上的队列轻松进行集群
- 默认情况下在集群中处理错误
- 通过可插拔架构提供高可用性的轻松持久性
- 和更多。
高级消息队列协议(AMQP)简介
AMQP是用于将消息从源分发和传送到目的地的广泛接受的开源标准。作为协议和标准,它为各种应用和消息代理中间件设置了共同的基础,以便在没有遇到由单独设置的设计决定引起的问题的情况下进行互操作。安装Apache Qpid
Apache Qpid入门指安装两套不同的工具:- Qpid Broker的实现取决于您选择的编程语言(例如,用于Python的C ++代理或用于Java的Java Broker)
- Qpid客户端库(例如Qpid Python)
在基于CentOS 6 / RHEL的系统上安装
让我们更新我们的Droplet:yum -y update
然后让我们运行以下命令获取Qpid C ++ Server及其工具(包括Python绑定):
yum install -y qpid-cpp-server qpid-tools
如果你需要,继续安装Qpid的语言绑定为其他人,如Ruby:
yum install -y ruby-qpid
在基于Ubuntu 13 / Debian 7的系统上安装
在Ubuntu和Debian上下载和安装Apache Qpid的过程与CentOS类似。 让我们开始更新我们系统的默认应用程序工具集:apt-get update
apt-get -y upgrade
然后让我们运行以下获取Qpid C ++ Server及其工具:
apt-get install -y qpidd qpid-tools
apt-get install -y libqpidmessaging2-dev python-qpid ruby-qpid
注意:在安装过程中会提示你输入
您选择的Qpid守护程序管理员
的密码。
管理Apache Qpid
基于CentOS / RHEL的系统上的管理
要启动,停止,重新启动并检查应用程序状态,请使用以下命令:# To start the service:
/sbin/service qpidd start
# To stop the service:
/sbin/service qpidd stop
# To restart the service:
/sbin/service qpidd restart
# To check the status:
/sbin/service qpidd status
# To force reload:
/sbin/service qpidd force-reload
在Ubuntu / Debian系统上管理
要在Ubuntu和Debian上启动,停止,重新启动和检查应用程序状态,请使用以下命令:# To start the service:
service qpidd start
# To stop the service:
service qpidd stop
# To restart the service:
service qpidd restart
# To check the status:
service qpidd status
# To force reload:
service qpidd force-reload
就这样!你现在有你自己的Apache Qpid消息代理工作在你的Droplet。 要了解更多关于Qpid及其丰富的配置选项数组,检查出的文档,
C ++实现和
Java实现 。
使用Apache Qpid
在我们安装Qpid及其Python语言绑定之后,让我们来看一个简单的Qpid示例来了解使用它的基本知识。 创建(样品)hello_world.py
使用文件
nano
:
nano hello_world.py
粘贴以下自解释模块:
# Import the modules we need
from qpid.messaging import *
broker = "localhost:5672"
address = "amq.topic"
connection = Connection(broker)
try:
connection.open()
# Define the session
session = connection.session()
# Define a sender *and* a receiver
sender = session.sender(address)
receiver = session.receiver(address)
# Send a simple "Hello world!" message to the queue
sender.send(Message("Hello world!"));
# Fetch the next message in the queue
message = receiver.fetch()
# Output the message
print message.content
# Check with the server
session.acknowledge()
except MessagingError, err:
print err
finally:
connection.close()
按CTRL + X,并用Y确认保存并退出。 当你运行上面的脚本,你应该看到我们的消息(即Hello world!)作为输出现在。
python hello_world.py
# Hello world!
如果遇到问题,请确保qpid正在运行。您可以使用上面的命令启动它。
:提交
OS Tezer