我正在尝试运行官方页面提供的示例代码: 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.Exceptions.ConnectFailureException' 在RabbitMQ.Client.dll中 'RabbitMQ.Client.Exceptions.BrokerUnreachableException'中 RabbitMQ.Client.dll
服务器未在localhost上运行,因此我已将主机名更改为服务器主机名。我可以通过ping从计算机访问服务器,服务器正在监听5672端口。
可能出现什么问题?
答案 0 :(得分:0)
好的,评论中的内容很少:
However the rabbit@.... is just the clustername, not refering to username
即使我不熟悉C#API,我也非常确定这是不是来编写主机名。您应该首先编写IP,看它是否有效,然后使用主机名。如果您愿意,可以使用API提供the AMQP URI。
集群是代理商本身的东西;如果客户端连接到群集中的节点或单个("非群集")实例,则客户端不应该关心...
其次,"客人" 默认使用的用户(如果未指定用户)只能从localhost访问代理(默认情况下再次)。因此,如果您尝试从另一台计算机连接到服务器,请使用" guest"不管用。您需要创建一个新的RMQ用户并分配适当的权限。
请注意,您当然可以以访客用户访问的方式配置RMQ(即使您更改了默认密码,即使对于开发环境也会非常错误),官方RMQ docker镜像以这种方式配置(是我上次检查无论如何)。
答案 1 :(得分:0)
可能您需要使用正确的.NET运行时。例如,它声明为RabbitMQ的here。此库的4.x和5.x版本系列需要.NET 4.5.1+或.NET Standard 1.5+实施(例如.NET Core 2.x)。这只是一个同事的事,他发现更新运行时解决了该问题,并且日志消息几乎没有提供有关原因的线索。