jky*_*dav 10 c# rabbitmq windows-server-2012
我的rabbitmq 应用程序在windows 2012 服务器上运行,我随机使用得到这个错误。
Exception Type: RabbitMQ.Client.Exceptions.BrokerUnreachableException
None of the specified endpoints were reachable
at RabbitMQ.Client.ConnectionFactory.CreateConnection()
at Program.Main(String[] args)
Stream does not support writing.
at System.IO.BufferedStream.EnsureCanWrite()
at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)
at RabbitMQ.Client.Impl.SocketFrameHandler.SendHeader()
at RabbitMQ.Client.Framing.Impl.Connection.StartAndTune()
at RabbitMQ.Client.Framing.Impl.Connection.Open(Boolean insist)
at RabbitMQ.Client.Framing.Impl.Connection..ctor(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)
at RabbitMQ.Client.Framing.Impl.ProtocolBase.CreateConnection(IConnectionFactory factory, Boolean insist, IFrameHandler frameHandler)
at RabbitMQ.Client.ConnectionFactory.CreateConnection()
Run Code Online (Sandbox Code Playgroud)
随机连接失败的原因可能是什么,它会自动开始连接。
任何人都可以帮我解决这个问题。
小智 10
我遇到了这个问题,最后我可以通过添加 ConnectionFactory 类的“Ssl”属性并指定“ServerName”子属性来解决它。
这是我所做的,它连接到 Rabbit MQ 服务器。请注意下面代码中的“ ServerName ”部分:
var rabbitMqConnectionFactory
= new ConnectionFactory
{
HostName = rabbitMqHostName,
Port = rabbitMqPort,
UserName = rabbitMqUserName,
Password = rabbitMqPassword,
VirtualHost = rabbitMqVirtualHost,
RequestedHeartbeat = 60,
Ssl =
{
**ServerName** = rabbitMqHostName,
Enabled = useSsl
}
};
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我通过使用 docker compose 创建新的 RabbitMQ Docker 容器来解决它:
rabbitmq:
container_name: rabbitmq
tty: true
hostname: rabbitmq
ports:
- "15672:15672"
- "5672:5672"
image: rabbitmq:3-management
environment:
- RABBITMQ_DEFAULT_USER=user
- RABBITMQ_DEFAULT_PASS=password
Run Code Online (Sandbox Code Playgroud)
要通过代码访问它,我必须在 appsettings.json 文件中将主机设置为我的本地主机 IP 地址:
"RabbitMqSend": {
"Hostname": "192.168.0.12",
"QueueName": "SendQueue",
"UserName": "user",
"Password": "password"},
Run Code Online (Sandbox Code Playgroud)
有了这个,它对我有用。
很难说到底是什么问题,但导致出现此类问题的原因之一是 RabbitMQ 心跳,您可以更改此值。有关详细信息,您可以查看此链接Detecting Dead TCP Connections with Heartbeats
ConnectionFactory cf = new ConnectionFactory();
// set the heartbeat timeout to 60 seconds
cf.setRequestedHeartbeat(60);
Run Code Online (Sandbox Code Playgroud)