示例#1
0
        // 默认发送消息,不知道消息是否正确到达Broker代理服务器
        private void SendMessage(RabbitMQConnectionDTO mqConnection, string exchangeName, string queueName,
                                 string routingKey, EnumRabbitExchangeType exchangeType, string message)
        {
            try
            {
                ConnectionFactory rabbitMqFactory = new ConnectionFactory()
                {
                    HostName = mqConnection.HostName,
                    UserName = mqConnection.UserName,
                    Password = mqConnection.Password,
                    Port     = mqConnection.Port
                };
                using (IConnection conn = rabbitMqFactory.CreateConnection())
                {
                    using (IModel channel = conn.CreateModel())
                    {
                        //channel.ExchangeDeclare(exchangeName, exchangeType.ToString(), durable: true, autoDelete: false, arguments: null);
                        //channel.QueueDeclare(queueName, durable: false, autoDelete: false, exclusive: false, arguments: null);
                        // 必须执行QueueBind 需要将routingKey与队列和交换机进行绑定
                        channel.QueueBind(queueName, exchangeName, routingKey);
                        var properties = channel.CreateBasicProperties();
                        properties.Persistent = false; // 设置消息持久化属性为true

                        byte[] messagebuffer = Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish(exchangeName, routingKey, properties, messagebuffer);
                        Rtx_Receive.Text = Rtx_Receive.Text + $"\r 发送时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"发送消息失败!{ex.Message}");
            }
        }
示例#2
0
 // 采取RabbitMQ事务方式传输消息
 private void SendMessageByTransaction(RabbitMQConnectionDTO mqConnection, string exchangeName, string queueName,
                                       string routingKey, EnumRabbitExchangeType exchangeType, string message)
 {
     try
     {
         ConnectionFactory rabbitMqFactory = new ConnectionFactory()
         {
             HostName = mqConnection.HostName,
             UserName = mqConnection.UserName,
             Password = mqConnection.Password,
             Port     = mqConnection.Port
         };
         using (IConnection conn = rabbitMqFactory.CreateConnection())
         {
             using (IModel channel = conn.CreateModel())
             {
                 channel.ExchangeDeclare(exchangeName, exchangeType.ToString(), durable: true, autoDelete: false, arguments: null);
                 channel.QueueDeclare(queueName, durable: false, autoDelete: false, exclusive: false, arguments: null);
                 // 必须执行QueueBind 需要将routingKey与队列和交换机进行绑定 否则就算事务提交了队列也不会有数据~
                 channel.QueueBind(queueName, exchangeName, routingKey);
                 byte[] messagebuffer = Encoding.UTF8.GetBytes(message);
                 try
                 {
                     channel.TxSelect();
                     channel.BasicPublish(exchangeName, routingKey, null, messagebuffer);
                     //if (1 == 1) throw new Exception("没错!我是故意抛出异常的!看看最终队列是否写入了消息~");
                     channel.TxCommit();
                 }
                 catch (Exception ex)
                 {
                     Rtx_Receive.Text = Rtx_Receive.Text + $"\r 异常产生时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},异常信息:{ex.Message}";
                     channel.TxRollback();
                     // TODO 进行补发OR其他逻辑处理
                 }
                 Rtx_Receive.Text = Rtx_Receive.Text + $"\r 发送时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show($"发送消息失败!{ex.Message}");
     }
 }
示例#3
0
        // 采取确认机制方式传输消息
        private void SendMessageByAck(RabbitMQConnectionDTO mqConnection, string exchangeName, string queueName,
                                      string routingKey, EnumRabbitExchangeType exchangeType, string message)
        {
            try
            {
                ConnectionFactory rabbitMqFactory = new ConnectionFactory()
                {
                    HostName = mqConnection.HostName,
                    UserName = mqConnection.UserName,
                    Password = mqConnection.Password,
                    Port     = mqConnection.Port
                };
                using (IConnection conn = rabbitMqFactory.CreateConnection())
                {
                    using (IModel channel = conn.CreateModel())
                    {
                        channel.ExchangeDeclare(exchangeName, exchangeType.ToString(), durable: false, autoDelete: false, arguments: null);
                        channel.QueueDeclare(queueName, durable: false, autoDelete: false, exclusive: false, arguments: null);
                        // 必须执行QueueBind 需要将routingKey与队列和交换机进行绑定 否则就算事务提交了队列也不会有数据~
                        channel.QueueBind(queueName, exchangeName, routingKey);
                        byte[] messagebuffer = Encoding.UTF8.GetBytes(message);
                        channel.ConfirmSelect(); // 启用服务器确认机制方式

                        channel.BasicPublish(exchangeName, routingKey, null, messagebuffer);
                        if (channel.WaitForConfirms())
                        {
                            Rtx_Receive.Text = Rtx_Receive.Text + $"\r 消息发送成功! 发送时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"发送消息失败!{ex.Message}");
            }
        }