4

RabbitMQ on Amazon EC2 Instance & Locally也有人问过类似的问题 ? 并且 无法从我的桌面连接到 ec2 上的 rabbitmq 但他们收到不同的错误消息。

我有一个在我的 linux EC2 实例上运行的 RabbitMQ 服务器,它设置正确。我创建了自定义用户并授予他们读/写队列的权限。使用本地客户端,我能够正确接收消息。我已经在 EC2 上设置了安全组,以便端口 (5672/25672) 是开放的并且可以远程登录到这些端口。我也像这样设置了rabbitmq.conf。

[
    {rabbit, [
            {tcp_listeners, [{"0.0.0.0",5672}]},
            {loopback_users, []},
            {log_levels, [{connection, info}]}
            ]
    }
].

目前我在服务器上有一个客户端发布到队列。

我有另一个客户端在 EC2 之外的服务器上运行,它需要使用来自同一个队列的数据(我不能在 EC2 上同时运行,因为消耗会进行大量的绘图/图形操作)。

但是,当我尝试使用一些测试代码从外部客户端连接时

try {
    ConnectionFactory factory = new ConnectionFactory();
    factory.setUri("amqp://****:****@****:5672/");
    connection = factory.newConnection();
} catch (IOException e) {
    e.printStackTrace();

}

我收到以下错误。

com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - 使用身份验证机制 PLAIN 拒绝登录。有关详细信息,请参阅代理日志文件。

但是,代理日志文件中没有任何内容,就好像我从未尝试过连接一样。我尝试使用工厂的单个 getter/setter 方法进行连接,我尝试使用不同的端口(以及打开它们)。

我想知道是否需要使用 SSL 或不连接到 EC2,但从网上阅读看来它应该可以工作,但我不确定。我找不到任何成功实现我想要做的事情并记录下来的人的例子。

提前致谢

4

1 回答 1

5

答案很简单,我需要将主机指定为我用来通过 SSH 访问的 IP。我试图使用我认为应该指向同一台机器的 EC2 实例实例的弹性 IP/公共 dns。

虽然我确实尝试了很多事情,包括设置 SSL 连接,但没有必要。

所需要的只是:

  1. 使用 rabbitmqctrl 创建 rabbitmq 用户并赋予其适当的权限
  2. 通过安全组菜单打开 EC2 上所需的端口(默认为 5672)
  3. 使用客户端库连接到正确的主机名/用户名/密码/端口,其中主机名与您通常通过 SSH 连接的机器相同。
于 2014-12-16T09:56:52.330 回答