java - Docker 容器中的 RabbitMQ 不允许我的 Java 应用程序连接
问题描述
我在 Docker 容器中运行 RabbitMQ。除了 RabbitMQ 镜像,我还安装了 RabbitMQ 管理插件。
使用插件我创建了用户“执行者”。我将用户权限设置为
虚拟主机 / 配置正则表达式 .* 写正则表达式 .* 阅读正则表达式 .*
这是我的代码
public static void main(String[] argv) throws Exception {
String message;
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(SERVER);
factory.setUsername(RABBIT_USER);
factory.setPassword(RABBIT_USER_PASSWORD);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, IS_DURABLE_QUEUE, false, false, null);
message = argv.length==1?argv[0]:"Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
channel.close();
connection.close();
}
当我运行这个应用程序时,我得到以下异常
Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:362)
at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:64)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:134)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:997)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:956)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:914)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1068)
at ca.meh.hial.producer.Producer.main(Producer.java:24)
显然,由于身份验证问题,用户无法连接。
我不确定是否需要安装其他插件。还是我需要配置 Docker 容器来验证凭据?
解决方案
显然,您不能使用一个 Docker 容器中的管理控制台来管理另一个 Docker 容器中的 RabbitMQ。
推荐阅读
- ssl-certificate - Django runserver_plus Werkzeug 未安装错误,虽然它是
- windows - Powershell 使用 Foreach-ObjectFast 和 Where-ObjectFast
- java - Java中用户定义的MyLinkedList类中的remove方法抛出错误
- python-3.x - 我如何使用 selenium 自动处理本网站上的特定问题?我基本上必须搜索一些东西,它类似于多项选择
- angular - 在现有项目中创建 Angular Web 组件
- python - gspread - 按列名获取特定列
- .net-core - 在 Entity Framework Core 中使用自定义链接表时的派生列
- c# - 切换语言设置时 jwt 令牌结果过期
- android - public final fun actionFragmentAToDetailActivity() 的参数太多
- python - 基于相同的列名加入多个 Pyspark 数据框