我尝试运行的示例代码,由官方页面提供:https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html
我使用的代码是:
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
class Send
{
public static void Main()
{
var factory = new ConnectionFactory() { HostName = "rabbit@my.host.name.net" };
var connection = factory.CreateConnection() //this throwing exception
var channel = connection.CreateModel()
}
}
问题是,我总是得到这些异常:
在RabbitMQ.Client.dll中的“RabbitMQ.客户端.异常.连接失败异常"
服务器没有在本地主机上运行,所以我已经将主机名更改为我的服务器主机名。我可以通过ping从我的计算机访问服务器,而服务器正在侦听5672端口。
有什么问题吗?
2条答案
按热度按时间flseospp1#
好了,下面就从评论中总结几点:
However the rabbit@.... is just the clustername, not refering to username
虽然我不熟悉C# API,但我很确定这不是写主机名的方式。你应该先写IP,看看它是否工作,然后写主机名。如果你愿意,你可以使用API来提供the AMQP URI。集群是为代理本身准备的东西;客户端不应该关心它们是连接到集群中的节点,还是连接到单个(“非集群”)示例...
其次,“guest”用户,默认情况下使用(如果没有指定用户)只能从localhost访问代理(同样是默认情况下)。因此,如果您试图从另一台计算机连接到服务器,使用“guest”将不起作用。您需要创建一个新的RMQ用户并分配适当的权限。
请注意,您当然可以以guest用户具有访问权限的方式配置RMQ(即使对于开发环境,这也是非常错误的,即使您更改了默认密码),正式的RMQ Docker映像也是以这种方式配置的(无论如何,这是我上次检查的)。
li9yvcax2#
您可能需要使用正确的.NET运行时。例如,RabbitMQ的here。此库的4.x和5.x发行版系列需要.NET 4.5.1+或.NET标准1.5+实现(例如.NET Core 2.x)。这只是发生在一个同事身上,他发现更新运行时修复了问题,日志消息几乎没有给出原因的线索。