Amazon MQ for RabbitMQ 中代理设置和连接管理的最佳实践
代理设置和连接管理是防止代理消息吞吐量、资源利用率及处理生产工作负载能力出现问题的第一步。当创建和配置 Amazon MQ for RabbitMQ 代理时,请完成以下最佳实践:选择适当的实例类型、有效管理连接以及配置消息预取,以最大化代理性能。
重要
Amazon MQ for RabbitMQ 不支持用户名“guest”,并会在您创建新代理时删除默认的访客账户。Amazon MQ 还将定期删除任何由客户创建的名为“guest”的账户。
步骤 1:使用集群部署
对于生产工作负载,我们建议使用集群部署而非单实例代理,以确保高可用性和消息弹性。集群部署消除了单点故障并提供更好的容错能力。
集群部署包含分布在三个可用区的三个 RabbitMQ 代理节点,可提供自动失效转移,并确保即使整个可用区不可用也能持续运行。Amazon MQ 会自动在所有节点间复制消息,以确保在节点故障或维护期间的可用性。
集群部署对生产环境至关重要,并受 Amazon MQ 服务级别协议
更多信息,请参阅 Amazon MQ for RabbitMQ 中的集群部署。
步骤 2:选择正确的代理实例类型
代理实例类型的消息吞吐量取决于应用程序用例。M7g.medium 应仅用于测试应用程序性能。在生产环境中使用较大实例前先使用此较小实例可以提高应用程序性能。在实例类型 m7g.large 及更大实例上,您可以使用集群部署来实现高可用性和消息持久性。较大的代理实例类型可以处理生产级别的客户端和队列、高吞吐量、内存中的消息和冗余消息。
有关选择正确实例类型的更多信息,请参阅 Amazon MQ for RabbitMQ 中的规模调整指南。
步骤 3:使用法定队列
对于 3.13 及以上版本的 RabbitMQ 代理,法定队列配合集群部署应作为生产环境中复制队列类型的默认选择。法定队列是一种现代复制队列类型,具有高可靠性、高吞吐量和稳定延迟的特点。
法定队列使用 Raft 共识算法以提供更好的容错能力。当主节点不可用时,法定队列通过多数投票自动选举新主节点,确保消息传递以最小中断持续进行。由于每个节点位于不同的可用区,即使整个可用区暂时不可用,您的消息系统仍保持可用。
要声明法定队列,请在创建队列时将头参数 x-queue-type 设置为 quorum。
有关法定队列的更多信息(包括迁移策略和最佳实践),请参阅 Amazon MQ for RabbitMQ 中的法定队列。
步骤 4:使用多个通道
为避免连接中断,请在单个连接上使用多个通道。应用程序应避免 1:1 的连接与通道比率。我们建议每个进程使用一个连接,每个线程使用一个通道。避免过度使用通道,以防通道泄漏。