我正在准备一个简单的ASP.NET Core MVC Web应用程序。
我已经在笔记本电脑上安装了RabbitMQ服务器。 RabbitMQ管理UI在localhost:15672
上运行。
兔子MQ集群名称类似于:rabbit@CR00001.ABC.COM.LOCAL
我正在尝试向控制器中的Rabbitmq发送消息。但是我收到所有指定端点均无法访问错误。
如果我使用“ localhost”作为主机名,则会在内部异常中得到拒绝连接127.0.0.1:5672。
如果我使用rabbit
作为主机名,则会得到名称或服务未知
我已经尝试根据其他StackOverflow问题来解决问题,但是这些问题都无法解决我的问题。
家庭控制器:
[HttpPost]
public void SendMessage([FromBody]Message message)
{
try
{
var factory = new ConnectionFactory()
{
UserName = _username,
Password = _password,
HostName = _hostname,
VirtualHost = "/",
Port = _port,
};
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: _queueName,
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var body = Encoding.UTF8.GetBytes(message.Text);
channel.BasicPublish(exchange: "",
routingKey: _queueName,
basicProperties: null,
body: body);
}
}
catch (Exception ex)
{
}
}
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"RabbitMq": {
"Hostname": "localhost",
"QueueName": "WordQueue",
"UserName": "test",
"Password": "test",
"Port": 5672
}
}
答案 0 :(得分:0)
您是否已在UI门户中设置了test
用户?这可能是您的连接被拒绝错误的原因。您可以通过http:// localhost:15672 /#/ users设置用户。
您还应该调试factory
,以检查是否正确传递了配置值
我还建议您在捕获中弹出一些代码,以确保您不会错过任何异常
对http://rabbit
的引用是在容器内使用的。仅当您在容器化网络(例如Docker Compose)中同时运行ASPNET和Rabbit应用程序时,这些方法才起作用。我发现使用容器是学习RabbitMq的更好方法。
意识到现在这有点偏离主题了,但是如果您不熟悉容器化,我建议您看一下Wolfgang Ofner https://www.programmingwithwolfgang.com/rabbitmq-in-an-asp-net-core-3-1-microservice/的这篇文章(以及相关系列文章)以及入门指南与YouTube https://www.youtube.com/watch?v=Kyx2PsuwomE上的Brad Traversy的Docker