从外部客户端连接到EC2上的RabbitMQ

时间:2014-12-11 05:58:02

标签: amazon-ec2 rabbitmq java-client

有人问过类似的问题 RabbitMQ on Amazon EC2 Instance & Locally?cant connect from my desktop to rabbitmq on ec2 但他们得到不同的错误信息。

我的linux EC2实例上运行的RabbitMQ服务器设置正确。我创建了自定义用户并赋予他们读取/写入队列的权限。使用本地客户端,我能够正确接收消息。我在EC2上设置了安全组,以便端口(5672/25672)打开并可以telnet到这些端口。我也像这样设置了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,但是从网上阅读看起来它应该可以正常工作但我并不完全确定。我找不到任何人成功实现我想要做的事情和记录它的例子。

提前致谢

1 个答案:

答案 0 :(得分:3)

答案很简单,我需要指定主机与我用于SSH的IP相同。我试图使用我认为应该指向同一台机器的EC2实例实例的弹性IP /公共DNS。

虽然我尝试了许多方法,包括设置SSL连接,但没有必要。

所需要的只是:

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