/// <summary> /// 侦听初始化 /// </summary> private void ListenInit(string queue) { try { Context.ListenConnection = RabbitMqClientFactory.CreateConnection();//获取连接 Context.ListenConnection.ConnectionShutdown += (o, e) => { //ESLog.Info("connection shutdown:" + e.ReplyText); //todo:记录日志 }; Context.ListenChannel = RabbitMqClientFactory.CreateModel(Context.ListenConnection); //获取通道 var consumer = new EventingBasicConsumer(Context.ListenChannel); //创建事件驱动的消费者类型 consumer.Received += ConsumerReveived; Context.ListenChannel.BasicQos(0, 1, false);//一次只获取一个消息进行消费 Context.ListenChannel.BasicConsume(queue ?? Context.ListenQueueName, false, consumer); } catch (Exception e) { //todo:记录日志 throw; } }
/// <summary> /// 出发一个事件且将事件打包成消息发送到远程队列 /// </summary> /// <param name="eventMessage">发送的消息实例。</param> /// <param name="queue">队列名称</param> /// <param name="exChange">RabbitMq的Exchange名称</param> public void TriggerEventMessage(EventMessage.EventMessage eventMessage, string queue, string exChange) { Context.SendConnection = RabbitMqClientFactory.CreateConnection();//获取连接 using (Context.SendConnection) { Context.SendChannel = RabbitMqClientFactory.CreateModel(Context.SendConnection);//获取通道 const byte deliveryMode = 2; using (Context.SendChannel) { var messageSerializer = MessageSerializerFactory.CreateMessageSerializerInstance(); //发序列化消息 var properties = Context.SendChannel.CreateBasicProperties(); properties.DeliveryMode = deliveryMode; //表示持久化消息 //声明队列 Context.SendChannel.QueueDeclare(queue, deliveryMode == 2, false, false, null); Context.SendChannel.BasicPublish(exChange, queue, properties, messageSerializer.SerializerBytes(eventMessage)); } } }