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());//创建连接对你
        }
Example #2
0
        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);
        }