介绍
当涉及到在应用程序和流程之间发送和接收消息时,您可以选择的解决方案很多,它们都有其优点和缺点,因此最好的做法是交叉检查您的需求,并与各种可用的解决方案匹配。
Apache Qpid 是开放源代码的消息系统之一,它实现了高级消息排队协议(AMQP),以帮助您在部署堆栈的不同元素之间解决高级消息的需求。
消息,消息经纪人和队列
消息传输是一种在流程、应用程序和服务器(虚拟和物理)之间交换某些数据的方式,这些信息交换,有助于满足某些工程需求,可以包括从简单的文本消息到用于满足不同需求的二进制数据。
从接收消息到排队,并将其交付给请求方,经纪人处理的任务通常会更困难或繁琐,与非专门的解决方案或简单的 hacks 如使用数据库, cron 工作等他们简单地通过处理技术上构成无限缓冲的排队工作,将消息放到后面自动或通过调查进行处理。
为什么使用它们?
这些消息传递解决方案作为各种服务的中间人(例如您的Web应用程序)。它们可以被用来大大降低Web应用程序服务器的负载和交付时间,因为任务通常需要相当长的时间来处理,可以被委托给第三方,其唯一任务是执行它们(即工人)。
什么时候使用它们?
总之,解释的核心功能扩展到涵盖多种领域,包括但不限于:
- 允许网页服务器快速响应请求,而不是被迫在 spot 上执行重量资源的程序* 向多个接收者发送消息以供消费(即处理)
- 允许离线各方(例如,脱机用户)在以后恢复数据,而不是将其永久失去
- 将完全不同步的功能引入后端系统
- 排序和优先任务
- 平衡员工之间的负载
- 极大地提高您的应用程序
- 的可靠性和可持续时间。
阿帕奇Qpid
Apache 软件基金会在消息传输方面有几种解决方案,其中之一是 Apache Qpid:该基金会的 AMQP 实施. 与一些旨在帮助开发人员创建自己的解决方案的更基本的应用程序不同,Qpid 与 RabbitMQ 相似,提供一个能够排队、安全和交易管理、聚集、通过可插入层等方式的工具集,其 API 默认情况下支持多种编程语言,并配备了 C++ (对于 Perl、Python、Ruby、.NET 等) 和 Java (JMS API) 经纪人。
它与其他人有什么不同?
完全封闭的消息经纪商在表面上仅略有不同,但更深入的内部分析揭示了事物如何运作的真相。
- 客户端故障检测和自动修复通过连接到不同的经纪人
- 通过重复不同服务器的队列轻松集群
- 在集群中默认错误处理
- 通过可插入的架构轻松坚持以提供高可用性
- 和更多。
先进消息排队协议(AMQP)简介
AMQP是一个广泛接受的开源标准,用于从源头传输和传输消息,作为一个协议和标准,它为各种应用程序和邮件经纪商中间件建立了一个共同的基础,以便在不遇到由个人设计决策引起的问题的情况下进行互操作。
安装 Apache Qpid
开始使用 Apache Qpid 意味着安装两个不同的工具集:
- Qpid 经纪人的实施取决于您选择的编程语言(如 Python 的 C++ 经纪人或 Java 经纪人)
- Qpid 客户端库(例如 Qpid Python)
** 注意:** 我们将执行我们的安装和列出的行动在这里新鲜和新创建的滴滴,由于各种原因. 如果你正在积极服务客户,并可能已经修改了你的系统,以免打破任何工作,并不会跑到问题,你是强烈建议尝试下面的指示在一个新的系统。
安装在 CentOS 6 / RHEL 基于系统上
让我们更新我们的滴滴:
1yum -y update
然后,让我们运行以下操作来获取Qpid C++ Server及其工具(包括Python绑定):
1yum install -y qpid-cpp-server qpid-tools
如果您需要,继续为 Ruby 等其他语言安装 Qpid 的语言绑定:
1yum install -y ruby-qpid
安装在 Ubuntu 13 / Debian 7 基于系统上
在 Ubuntu 和 Debian 上下载和安装 Apache Qpid 的过程将与 CentOS 类似。
让我们开始更新我们的系统的默认应用程序工具集:
1apt-get update
2apt-get -y upgrade
然后,让我们运行以下操作来获取 Qpid C++ 服务器及其工具:
1apt-get install -y qpidd qpid-tools
2apt-get install -y libqpidmessaging2-dev python-qpid ruby-qpid
** 注意:** 在安装过程中,您将被要求为 Qpid daemon 管理员输入您选择的密码。
管理 Apache Qpid
基于CentOS / RHEL的系统管理
若要启动、停止、重新启动和检查应用程序状态,请使用以下方法:
1# To start the service:
2/sbin/service qpidd start
3
4# To stop the service:
5/sbin/service qpidd stop
6
7# To restart the service:
8/sbin/service qpidd restart
9
10# To check the status:
11/sbin/service qpidd status
12
13# To force reload:
14/sbin/service qpidd force-reload
在 Ubuntu / Debian 基于系统上管理
要启动、停止、重新启动并检查 Ubuntu 和 Debian 上的应用程序状态,请使用以下方法:
1# To start the service:
2service qpidd start
3
4# To stop the service:
5service qpidd stop
6
7# To restart the service:
8service qpidd restart
9
10# To check the status:
11service qpidd status
12
13# To force reload:
14service qpidd force-reload
你现在有自己的Apache Qpid消息经纪人在你的滴滴上工作。
要了解更多关于 Qpid 及其广泛的配置选项,请参阅其 C++ 实现和 Java 实现的文档。
使用Apache Qpid
在我们安装 Qpid 以及其 Python 语言结合之后,让我们看看一个简单的 Qpid 示例,以了解与之合作的基本知识。
使用「nano」创建一个(示例) hello_world.py
文件:
1nano hello_world.py
点击下面的自我解释模块:
1# Import the modules we need
2from qpid.messaging import *
3
4broker = "localhost:5672"
5address = "amq.topic"
6connection = Connection(broker)
7
8try:
9 connection.open()
10
11 # Define the session
12 session = connection.session()
13
14 # Define a sender *and* a receiver
15 sender = session.sender(address)
16 receiver = session.receiver(address)
17
18 # Send a simple "Hello world!" message to the queue
19 sender.send(Message("Hello world!"));
20
21 # Fetch the next message in the queue
22 message = receiver.fetch()
23
24 # Output the message
25 print message.content
26
27 # Check with the server
28 session.acknowledge()
29
30except MessagingError, err:
31 print err
32
33finally:
34 connection.close()
按 CTRL + X 并用 Y 确认保存和退出。
当您运行上述脚本时,您应该看到我们的消息(即 Hello world!)作为现在的输出。
1python hello_world.py
2# Hello world!
如果您遇到问题,请确保 qpid 正在运行,您可以使用上面的命令启动它。