如何安装和管理ApacheQpid
介绍
在应用程序和进程之间发送和接收消息时,有许多解决方案可供您选择。 它们都有其优点和缺点,因此最好的办法是交叉检查您的要求并将它们与各种可用的解决方案相匹配。
Apache Qpid 是实现高级消息队列协议 (AMQP) 的开源消息传递系统之一,可帮助您解决部署堆栈的不同元素之间的高级消息传递需求。
消息传递、消息代理和队列
消息传递是一种在进程、应用程序和服务器(虚拟和物理)之间交换某些数据的方式。 这些交换的消息有助于满足某些工程需求,可以包含从纯文本消息到用于满足不同需求的二进制数据块的任何内容。 为此,需要由第三方程序(中间件)管理的接口 - 欢迎使用 Message Brokers。
消息代理通常是应用程序堆栈,其中包含覆盖交换设置每个阶段的专用部分。 从接受消息到排队并将其传递给请求方,经纪人处理的职责通常会比非专用解决方案或简单的 hacks(例如使用数据库、cron工作等 它们只是通过处理技术上构成无限缓冲区的队列来工作,以放置消息并稍后弹出并传递它们以自动或通过轮询进行处理。
为什么要使用它们?
这些消息代理解决方案充当各种服务的中间人(例如 您的网络应用程序)。 它们可用于大大减少 Web 应用程序服务器的负载和交付时间,因为通常需要相当长的时间来处理的任务可以委托给第三方,其唯一工作是执行它们(即 工人)。 当需要更“有保证”的持久性将信息从一个地方传递到另一个地方时,它们也会派上用场。
什么时候使用它们?
总而言之,所解释的核心功能扩展到涵盖多个领域,包括但不限于:
- 允许 Web 服务器快速响应请求,而不是被迫在现场执行大量资源的程序
- 将消息分发给多个收件人以供消费(即 加工)
- 让线下聚会(例如 断开连接的用户)稍后获取数据,而不是让它永久丢失
- 向后端系统引入完全异步功能
- 对任务进行排序和优先级
- 平衡工作人员之间的负载
- 大大提高应用程序的可靠性和正常运行时间
- 以及更多。
阿帕奇 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 代理)
- Qpid 客户端库(例如 Qpid Python)
注意: 出于各种原因,我们将在全新创建的 Droplet 上执行我们的安装和此处列出的操作。 如果您正在积极地为客户服务并且可能已经修改了您的系统,以不破坏任何工作并且不遇到问题,强烈建议您在新系统上尝试以下说明。
在基于 CentOS 6 / RHEL 的系统上安装
让我们更新我们的液滴:
yum -y update
然后让我们运行以下命令来获取 Qpid C++ Server 及其工具(包括 Python 绑定):
yum install -y qpid-cpp-server qpid-tools
如果您需要,请继续为 Ruby 等其他语言安装 Qpid 的语言绑定:
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 示例来了解使用它的基础知识。
使用 nano
创建(示例)hello_world.py
文件:
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 正在运行。 您可以使用上面的命令启动它。