public static IConnection CreateConnection(RabbitMq _rabbitMq) { rabbitmq = _rabbitMq; mqConfigCom = rabbitmq.MqConfig; const ushort heartbeat = 60; var factory = new ConnectionFactory() { HostName = mqConfigCom.MqHost, UserName = mqConfigCom.MqUserName, Password = mqConfigCom.MqPassword, //心跳超时时间,如果是单节点,不设置这个值是没有问题的 //但如果连接的是类似HAProxy虚拟节点的时候就会出现TCP被断开的可能性 RequestedHeartbeat = heartbeat, AutomaticRecoveryEnabled = true, //自动重连 Port = AmqpTcpEndpoint.UseDefaultPort, VirtualHost = mqConfigCom.MqVirtualHost }; return(factory.CreateConnection());//创建连接对你 }
public void SendMsg <T>(RabbitMq rabbitMq, T msg) { //创建连接 IConnection connection = RabbitMQClientFactory.CreateConnection(rabbitMq); //创建通道 IModel channel = connection.CreateModel(); //申明队列 channel.QueueDeclare(rabbitMq.QueueName, true, false, false, null); //声明交换机 channel.ExchangeDeclare(rabbitMq.ExchangeName, rabbitMq.RoutType, true, false, null); //交换机和消息队列绑定 channel.QueueBind(rabbitMq.QueueName, rabbitMq.ExchangeName, rabbitMq.RoutKey, null); var basicProperties = channel.CreateBasicProperties(); //1:非持久化 2:可持久化 basicProperties.DeliveryMode = 2; var payload = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(msg)); var address = new PublicationAddress(rabbitMq.RoutType, rabbitMq.ExchangeName, rabbitMq.RoutKey); channel.BasicPublish(address, basicProperties, payload); }