正在连接到 Amazon MQ - Amazon MQ
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

正在连接到 Amazon MQ

以下设计模式可以提高您的应用程序连接到 Amazon MQ 代理的有效性。

永远不要修改或删除 Amazon MQ 弹性网络接口

当你第一次创建 Amazon MQ 代理,Amazon MQ 会提供弹性网络接口中的Virtual Private Cloud (VPC)根据您的帐户,因此,需要一些EC2 权限。网络接口允许您的客户端(创建者或使用者)与 Amazon MQ 代理通信。网络接口被视为位于服务范围,尽管是您的账户的 VPC 的一部分。

警告

您不得修改或删除此网络接口。修改或删除网络接口可能会导致永久丢失您的 VPC 和代理之间的连接。

始终使用连接池

在使用单个创建者和单个使用者的方案(例如 Getting Started with Amazon MQ 教程),您可以将单个 ActiveMQConnectionFactory 类用于每个创建者和使用者。例如:

// Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the username and password. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Establish a connection for the consumer. final Connection consumerConnection = connectionFactory.createConnection(); consumerConnection.start();

但是,在具有多个创建者和使用者的更真实的方案中,为多个创建者创建大量连接可能成本高昂,并且效率低下。在这些方案中,您应使用 PooledConnectionFactory 类将多个创建者请求分组。例如:

注意

消息使用者绝不 应使用 PooledConnectionFactory 类。

// Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the username and password. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Create a pooled connection factory. final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(); pooledConnectionFactory.setConnectionFactory(connectionFactory); pooledConnectionFactory.setMaxConnections(10); // Establish a connection for the producer. final Connection producerConnection = pooledConnectionFactory.createConnection(); producerConnection.start();

始终使用故障转移传输连接到多个代理终端节点

如果您需要您的应用程序连接到多个代理终端节点(例如,当您使用主动/备用代理部署模式或从本地消息代理迁移到 Amazon MQ— 使用故障转移传输,以允许您的消费者随机连接到任何一个。例如:

failover:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617,ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)?randomize=true

避免使用消息选择器

可以使用 JMS 选择器将筛选器附加到主题订阅(以将消息基于其内容路由到使用者)。但是,JMS 选择器的使用将会填满 Amazon MQ 代理的筛选器缓冲区,从而阻止其筛选消息。

一般来说,应避免让使用者路由消息,这样做的原因是,为了实现使用者和创建者的最佳解耦,使用者和创建者均应是短暂存在的。

首选虚拟目标而非持久订阅

持久订阅可帮助确保使用者收到发布到主题的所有消息,例如,在恢复丢失的连接后。但是,使用持久订阅还阻止竞争性使用者使用并可能具有大规模性能问题。考虑改用虚拟目标