Exemple #1
0
        public static void Receive(RabbitMQModel model,Action<string> action)
        {
            ConnectionFactory factory = new ConnectionFactory();
            factory.HostName = model.HostName;
            factory.UserName = model.UserName;
            factory.Password = model.Password;
            using (IConnection conn = factory.CreateConnection())
            {
                using (IModel channel = conn.CreateModel())
                {
                    //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                    channel.QueueDeclare(model.QueueName, false, false, false, null);

                    //输入1,那如果接收一个消息,但是没有应答,则客户端不会收到下一个消息
                    channel.BasicQos(0, 1, false);

                    //在队列上定义一个消费者
                    QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
                    //消费队列,并设置应答模式为程序主动应答
                    channel.BasicConsume(model.QueueName, false, consumer);

                    while (true)
                    {
                        //阻塞函数,获取队列中的消息
                        BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                        byte[] bytes = ea.Body;
                        string str = Encoding.UTF8.GetString(bytes);
                        action.Invoke(str);
                        //回复确认
                        channel.BasicAck(ea.DeliveryTag, false);
                    }
                }
            }
        }
Exemple #2
0
        public static void Send(RabbitMQModel model, Action<string> action, string obj)
        {
            ConnectionFactory factory = new ConnectionFactory();
            factory.HostName = model.HostName;
            factory.UserName = model.UserName;
            factory.Password = model.Password;
            using (IConnection conn = factory.CreateConnection())
            {
                using (IModel channel = conn.CreateModel())
                {
                    //在MQ上定义一个持久化队列,如果名称相同不会重复创建
                    channel.QueueDeclare(model.QueueName, false, false, false, null);
                    while (true)
                    {

                        byte[] bytes = Encoding.UTF8.GetBytes(obj);

                        //设置消息持久化
                        IBasicProperties properties = channel.CreateBasicProperties();
                        properties.DeliveryMode = 2;
                        channel.BasicPublish("", model.QueueName, properties, bytes);

                        //channel.BasicPublish("", "MyFirstQueue", null, bytes);
                        action.Invoke("消息已发送:" + obj);
                    }
                }
            }
        }
 /// <summary>
 /// 接收命令处理
 /// </summary>
 private static void ReceiveCommandLoop()
 {
     LogHelper.WriteInfo("准备接收消息");
     RabbitMQModel model = new RabbitMQModel();
     model.HostName = "localhost";
     model.UserName = "******";
     model.Password = "******";
     model.QueueName = "NodeService";
     RabbitMQHelper.Receive(model, (c) =>
     {
         if (!string.IsNullOrEmpty(c))
         {
             LogHelper.WriteInfo("接收消息" + c);
             Command cmd = LibJsonConvert.DeserializeObject<Command>(c);
             CommandFactory.Execute(cmd);
         }
     });
 }