本文补充说明采用开源身份验证和权限管理方式的云消息队列 RabbitMQ 版实例通过公网接入时,客户端需要额外配置的实例 ID。
适用范围
本文适用于同时满足以下条件的实例:
创建实例时选择了开源身份验证和权限管理方式。
实例版本为以下任一版本:
Serverless系列:
(独享)预留+弹性
(共享)预留+弹性
(共享)按累积量
预付费企业版
预付费铂金版
实例详情页面已显示公网接入点。
各版本是否需要客户端传入实例 ID,请参见下文。
前提条件
通过公网访问实例时必须启用公网 IP 白名单,并将客户端实际公网出口 IP 地址或 CIDR 地址段加入白名单。仅白名单范围内的客户端可以访问实例。
连接前,请完成以下配置:
客户端设置实例 ID
公网接入时,不同版本的客户端配置要求如下:
实例系列 | 具体版本 | 是否需要传入实例 ID | 说明 |
Serverless系列 | (独享)预留+弹性 | 否 | 服务端可以自动识别目标实例。 |
Serverless系列 | (共享)预留+弹性 | 是 | 客户端必须通过 AMQP Client Properties 指定目标实例。 |
Serverless系列 | (共享)按累积量 | 是 | 客户端必须通过 AMQP Client Properties 指定目标实例。 |
预付费系列 | 铂金版 | 否 | 服务端可以自动识别目标实例。 |
预付费系列 | 企业版 | 是 | 客户端必须通过 AMQP Client Properties 指定目标实例。 |
Java 配置示例
使用 Serverless 系列的(共享)预留+弹性或(共享)按累积量规格,或者使用预付费企业版时,按照步骤三:调用SDK收发消息配置公网接入点、用户名、密码和 Vhost 后,在调用 newConnection() 前增加以下配置:
String instanceId = "amqp-cn-xxxxxxxx";
// factory 已按常规方式配置公网接入点、用户名、密码和 Vhost。
Map<String, Object> clientProperties =
new HashMap<String, Object>(factory.getClientProperties());
clientProperties.put("aliyun_rabbitmq_instance_id", instanceId);
factory.setClientProperties(clientProperties);
Connection connection = factory.newConnection();注意事项:
aliyun_rabbitmq_instance_id的值必须是控制台展示的实例 ID,而不是公网接入点。(共享)预留+弹性、(共享)按累积量和预付费企业版必须在创建 Connection 前设置该属性。
复制并保留
factory.getClientProperties()中的默认属性,避免覆盖 Java Client 自带的客户端信息。(独享)预留+弹性和预付费铂金版无需设置该属性;如果主动设置,属性值必须与当前实例 ID 一致。
连接失败时检查
如果公网连接被拒绝或返回 AccessAccountDataError 错误,请依次确认:
客户端实际公网出口 IP 已加入目标实例的公网 IP 白名单。
使用(共享)预留+弹性、(共享)按累积量或预付费企业版时,确认
aliyun_rabbitmq_instance_id已设置且与目标实例 ID 完全一致;(独享)预留+弹性和预付费铂金版无需设置该属性。自定义用户名和密码正确,并且用户已获得目标 Vhost 的访问权限。
客户端配置的是实例的公网接入点,而不是 OpenAPI 服务接入地址。
网络超时、资源权限或常规 SDK 配置问题,请参见连接失败的可能原因及解决办法。