为了避免污染宿主系统环境,于是在虚拟机中搭建了一个linux环境并且安装了rabbitmq-server。然后在远程连接的时候一直连接失败。官网上面给的例子都是在本地使用系统默认的guest用户连接的。没有给出远程连接的例子,于是阅读文档发现:

    When the serverfirst starts running, and detects that its database is uninitialised or hasbeen deleted, it initialises a fresh database with the following resources:a virtual hostnamed /a user namedguest with a default password of guest, granted full access to the / virtualhost.

也就是刚刚安装好rabbitmq-server,系统会自动创建一个名为“/”的virtual host,同时也会创建一个用户名和密码都是guest的用户,并且应用"/ virtual host"的所有访问权限。因此在rabbitmq安装的机器上使用官网给出的例子:

public class Send {// 队列名称privatefinal static String QUEUE_NAME = "hello";publicstatic void main(String[] argv) throws java.io.IOException {/*** 创建连接连接到MabbitMQ*/ConnectionFactoryfactory = new ConnectionFactory();// 设置MabbitMQ所在主机ip或者主机名factory.setHost("localhost");// 创建一个连接Connectionconnection = factory.newConnection();// 创建一个频道Channelchannel = connection.createChannel();// 指定一个队列channel.queueDeclare(QUEUE_NAME,false, false, false, null);// 发送的消息Stringmessage = "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 localhostBy default, theguest user is prohibited from connecting to the broker remotely; it can onlyconnect over a > loopback interface (i.e. localhost). This applies both toAMQP and to any other protocols enabled via plugins. Any > other users youcreate will not (by default) be restricted in this way.This isconfigured via the loopback_users item in the configuration file.If you wish toallow the guest user to connect from a remote host, you should set theloopback_users configuration item to []. A complete rabbitmq.config which doesthis would look like:

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

rabbitmqctl environment

会发现:

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

rabbitmqctl add_user test 123456
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p / test ".*"".*" ".*"

创建用户

为用户设置角色

为用户设置权限

这种方式设置的默认的“/”权限,还可以自己添加其它权限

rabbitmqctl add_vhost vhost_test

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

public class Send2 {// 队列名称private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws java.io.IOException {/*** 创建连接连接到MabbitMQ*/ConnectionFactory factory = new ConnectionFactory();// 设置MabbitMQ所在主机ip或者主机名factory.setHost("localhost");factory.setPort(5672);factory.setUsername("test");factory.setPassword("123456");factory.setVirtualHost("vhost_test");// 创建一个连接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();}
}
public class Recv2 {// 队列名称private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws java.io.IOException,ShutdownSignalException, ConsumerCancelledException,InterruptedException {// 打开连接和创建频道,与发送端一样ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("test");factory.setPassword("123456");factory.setVirtualHost("vhost_test");Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");// 创建队列消费者QueueingConsumer consumer = new QueueingConsumer(channel);// 指定消费队列channel.basicConsume(QUEUE_NAME, true, consumer);while (true) {// nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)QueueingConsumer.Delivery delivery = consumer.nextDelivery();String message = new String(delivery.getBody());System.out.println(" [x] Received '" + message + "'");}}
}

输出:

 [*] Waiting for messages. To exit press CTRL+C[x] Received 'hello world!'

这次连接成功,测试通过

RabbitMQ(四)远程连接RabbitMQ相关推荐

  1. spring 远程连接 rabbitMQ 报错

    1.springboot配置文件 application.peroproperties spring.rabbitmq.username=guest spring.rabbitmq.password= ...

  2. RabbitMQ创建远程连接用户

    RabbitMQ不允许默认用户guest远程访问,所以需要创建一个新的用户,以下命令序列用于创建新用户admin(密码admin) D:\Program\RabbitMQ Server\rabbitm ...

  3. 虚拟机的安装和linux操作系统(RedHat.8.5)的安装。将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用ssh通过不同用户远程连接。在linux系统下破解密码

    目录 一.在VMware上如何创建虚拟机以及安装linux操作系统. 二.修改主机名为server.local. 三.将虚拟机的网络连接模式分别调换成仅主机模式,nat模式,桥接模式并获取ip地址使用 ...

  4. RabbitMQ(四):RabbitMQ与Spring Boot简单整合 快速尝鲜版

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...

  5. 使用php-amqplib连接rabbitMQ 学习笔记及总结

    1.使用composer安装php-amqplib 在你的项目中添加一个 composer.json文件:{"require": {"php-amqplib/php-am ...

  6. RabbitMQ 四种类型发送接收数据方式

    1.基本用法 生产者 1 import pika 2 import sys 3 4 username = 'wt' #指定远程rabbitmq的用户名密码 5 pwd = '111111' 6 use ...

  7. java Rabbitmq ssl 安全连接详细流程(附图)

    Rabbitmq ssl 安全连接流程 1 生成证书 2 配置服务端 3 编辑java客户端 1 生成证书 git clone https://github.com/michaelklishin/tl ...

  8. 连接rabbitmq超时问题(自定义、与springboot连用等)

    自定义连接工厂 通过自定义连接工厂连接时,ip.端口都正确的情况下,连接rabbitmq还是不行,报异常 Exception in thread "main" java.util. ...

  9. PHP 连接 Rabbitmq 实例代码(亲测通过)

    接下来我们用 php 连接 rabbitmq 玩一玩. 还没有安装 rabbitmq ,请参考 Rabbitmq 安装 还没有安装 PHP 的 AMQP 扩展,参考 PHP AMQP 扩展安装 一些概 ...

最新文章

  1. ICLR2020 | StructBERT : 融合语言结构的BERT模型
  2. Objective-C设计模式——生成器Builder(对象创建)
  3. iOS -数据库网络之xml解析之远程解析XML
  4. CentOS linux7 设置开机启动服务
  5. 将PowerShell连接到SQL Server
  6. rabbitmq 查看消费者_(Windows环境下)RabbitMQ系列(一)安装以及入门使用
  7. Baby‘s first attempt on CPU(贪心+模拟)
  8. PAT 1031 查验身份证
  9. php mysql简单分页代码_用php制作简单分页(从数据库读取记录)的方法详解
  10. 手机远程控制电脑方法(TeamViewer vs 向日葵)
  11. 谷歌支付服务端服务账号订单校验
  12. c语言程序坐标反算,坐标正算反算公式讲解
  13. 检测和寻找木马隐藏的位置的方法
  14. linux最新bbr加速,CentOS 7.8 安装BBR加速
  15. 科比都这么努力,你还有什么借口不努力呢?
  16. day08 操作索引脏读、幻读、不可重复读 python复习
  17. 如何理解yield的用法
  18. 【我是初学者】关于获取配置文件.properties的常见三种方式--只是常见的方式,欢迎牛神来加瓦
  19. ArcGIS Earth 1.11版本发布啦!
  20. 从大型电子厂到互联网大厂(富士康到腾讯),我花了1年时间

热门文章

  1. 行业竞争分析及发展动向
  2. 【5G网络基础,熟知即可】
  3. 六、软件用户操作手册-模板
  4. Android(三)原生开发基本知识
  5. 用ubuntu的grpb2引导Remix OS或Phoenix OS
  6. 12 款做Java后台管理系统的项目,超级无敌好用!
  7. 金融互联网之网络征信技术接口
  8. ava虚拟机详解--GC算法和种类【重要】
  9. 华为交换机RRPP的基本配置
  10. arcgis符号方向_arcgis符号