远程连接RabbitMQ失败

为了避免污染宿主系统环境,于是在虚拟机中搭建了一个linux环境并且按照了rabbitmq-server。然后在远程连接的时候一直连接失败。

官网上面给的例子都是在本地使用系统默认的guest用户连接的。没有给出远程连接的例子,于是阅读文档发现:

When the server first starts running, and detects that its database is uninitialised or has been deleted, it initialises a fresh database with the following resources:

a virtual host named /
a user named guest with a default password of guest, granted full access to the / virtual host.

也就是刚刚安装好rabbitmq-server,系统会自动创建一个名为“/”的virtual host,同时也会创建一个用户名和密码都是guest的用户,并且应用"/ virtual host"的所有访问权限。

因此在rabbitmq安装的机器上使用官网给出的例子:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

public class Send {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv) throws Exception {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    String message = "Hello World!";
    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    System.out.println(" [x] Sent ‘" + message + "‘");

    channel.close();
    connection.close();
  }
}

运行是没问题的。如果要切换到远程机器访问的话,单纯的修改

    factory.setHost("localhost");

是不行的。

因为guest用户只是被容许从localhost访问。官网文档描述如下:

"guest" user can only connect via localhost

By default, the guest user is prohibited from connecting to the broker remotely; it can only connect over a > loopback interface (i.e. localhost). This applies both to AMQP and to any other protocols enabled via plugins. Any > other users you create will not (by default) be restricted in this way.

This is configured via the loopback_users item in the configuration file.

If you wish to allow the guest user to connect from a remote host, you should set the loopback_users configuration item to []. A complete rabbitmq.config which does this would look like:

[{rabbit, [{loopback_users, []}]}].

默认情况下,使用下面的命令:

sudo rabbitmqctl environment

会发现:

  {default_permissions,[<<".*">>,<<".*">>,<<".*">>]},
  {default_user,<<"guest">>},
  {default_user_tags,[administrator]},
  {default_vhost,<<"/">>},
  {loopback_users,[<<"guest">>]},
  {tcp_listeners,[5672]},

我这快不想使用默认的guest用户,我新建立了一个用户rollen,然后授予所有权限,使用下面的命令:

rabbitmqctl add_user rollen root
rabbitmqctl set_user_tags rollen administrator
rabbitmqctl set_permissions -p / rollen ".*" ".*" ".*"

然后使用下面的代码远程访问

package com.rollenholt.rabbitmq.example1;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.126.131");
        factory.setUsername("rollen");
        factory.setPassword("root");
        factory.setPort(5672);
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent ‘" + message + "‘");
        channel.close();
        connection.close();
    }
}

参考文档

时间: 2024-08-02 15:58:16

远程连接RabbitMQ失败的相关文章

远程连接Mysql失败的问题的解决的原因

在CentOS环境下,安装完Mysql后,root的密码为空,需要去设置密码才能使用,设置密码的方法如下: /usr/bin/mysqladmin -u root password yourpasswd 注意把上述命令的yourpasswd替换为自己的密码,这个时候如果使用以下命令成功登陆Mysql终端,说明密码设置成功: mysql -u root -p 此时,远程连接Mysql的时候,会提示你无法访问,查看系统表的user表,你回发现用户只有从localhost访问的权限: mysql> s

ssh 远程连接linux失败

1. 检查sshd服务的状态以及端口是否正常, 如下为正常状态 sudo netstat -nlp | grep :22 [email protected]:~$ netstat -nlp | grep 22(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)tcp        0      0 0.0

远程连接mongodb时,27017端口连接不上的解决办法

一.背景描述: 我在linux  RED7上安装了mongodb,并没有修改mongodb的配置文件.然后通过另外一台电脑用pymongo连接mongodb时,报错:timeout. ping IP 是成功的. telnet IP 27017 的时候,提示:27017端口连接不上. 二.解决过程: 各种百度,远程连接mongodb失败,网上资料显示原因有两个: 1.mongodb的配置文件中的bind_ip 默认为127.0.0.1,默认只有本机可以连接.  此时,需要将bind_ip配置为0.

Ubuntu16 远程连接MySQL

1.进入MySQL配置目录允许其他IP可以链接 vi /etc/mysql/mysql.conf.d/mysqld.cnf 吧下面这行注释掉 #bind-address = 127.0.0.1 2.远程连接还是失败,查看日志发现会把访问IP去查找域名,关闭DNS解析 #vi /etc/mysql/my.cnf 加上这个 skip-name-resolve 3.链接仍然失败,查看日志发现关闭DNS解析后找不到自己域名 1 100616 21:05:15 [Warning] 'user' entry

Windows下MongoDB的配置及其远程连接

基本操作MongoDB的基本安装https://blog.csdn.net/heshushun/article/details/77776706启动和配置MongoDB服务参考博客https://blog.csdn.net/ljk168/article/details/79452895创建MongoDB用户名及账户参考博客https://www.cnblogs.com/wuyubing/p/4897387.html 远程连接MongoDB失败的解决办法1.mongodb的配置文件中的bind_i

【BUG &amp; PROBLEM】mysql远程连接失败

问题描述 今天在云主机上用mysql客户端连接远程数据库,提示连接失败.提示 Host "62.183.38.xx" is not allow to connect the mysql server. Host 是我外网的IP.关闭云主机防火墙和启动mysql服务都无效. 解决方案 之后查了相关网友的资料后,找到原因,是由于mysql默认没有开启远程连接的权限.因此在mysql命令行中开启权限,问题解决! mysql > GRANT ALL PRIVILEGES ON *.* T

轻松,阿里云云服务器上安装mysql5.6,解决远程连接失败问题

最近刚接触linux操作系统,买了个阿里云服务器,centos7系统,装mysql数据库网上查看了别人的博客,方法都不太一样,自己也试了几个,结果都没有成功. 后来搜索发现阿里云安装mysql跟有专门的方法,我把云服务器磁盘初始化之后,重新安装,然后试了真的安装成功了,希望这篇博文能帮助以后在阿里云上安装mysql的朋友,不用再走我走过的弯路.以下是我测试安装成功的步骤,命令也可以直接复制粘贴.我看到链接地址:https://jingyan.baidu.com/article/454316ab6

SecureCRT连接Ubuntu失败(远程系统拒绝访问)

SecureCRT连接Ubuntu失败,长时间的重新连接,连接不了. Ubuntu默认未安装ssh远程加密连接服务. 使用命令,安装即可. sudo apt-get install openssh-server openssh-client 重启Ubuntu,默认已经开启ssh功能. 如果还是未连接,则 启动ssh-server: /etc/init.d/ssh restart 检查ssh-server运行: netstat -tlp 注:其中有ssh,则已启动运行. ssh -l tskk l

解决方案—SQL Server 远程连接失败

机房收费系统异地发布的时候,需要保证数据库能够远程连接,但连接的时候通常会报错: 要解决这个问题,首先需要检查SqlServer 的几项设置.(这些设置一般都是系统默认项,不过最好看一下) (一)检查SQL Server是否允许远程链接.以SqlServer 身份验证方式登陆.登录账户sa (二)打开配置管理器,检查微软SQL服务器(MSSQLServer)的TCP/IP协议是否开启. 确保上面设置正确后,进行最后的SQL服务器防火墙设置,(问题大多出在这里) 一.可以直接关闭防火墙,但是这样不