/// <summary>
        ///
        /// </summary>
        /// <param name="httpContext"></param>
        /// <param name="configuration"></param>
        /// <param name="loggerFactory"></param>
        /// <returns></returns>
        public async Task InvokeAsync(HttpContext httpContext, IConfiguration configuration, ILoggerFactory loggerFactory)
        {
            //_services.AddTransient<RabbitMQClient, RabbitMQClient>();

            var work_queue_types = AppDomain.CurrentDomain.GetAssemblies()
                                   .SelectMany(a => a.GetTypes().Where(t => t.BaseType != null && t.BaseType.Name == typeof(WorkQueuesBase <>).Name))
                                   .ToArray();

            RabbitMQClient client = new RabbitMQClient(configuration);

            foreach (var type in work_queue_types)
            {
                var    logger = loggerFactory.CreateLogger(type);
                object obj    = Activator.CreateInstance(type, client, logger);
                type.InvokeMember("Execute", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, null);
            }

            var publish_subscribe_types = AppDomain.CurrentDomain.GetAssemblies()
                                          .SelectMany(a => a.GetTypes().Where(t => t.BaseType != null && t.BaseType.Name == typeof(PublishSubscribeBase <>).Name))
                                          .ToArray();

            foreach (var type in publish_subscribe_types)
            {
                var    logger = loggerFactory.CreateLogger(type);
                object obj    = Activator.CreateInstance(type, client, logger);
                type.InvokeMember("Execute", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, null);
            }

            await _next(httpContext);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 订阅消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="exchange"></param>
        /// <param name="handler"></param>
        public static void Subscribe <T>(this RabbitMQClient client, string exchange, Action <T> handler) where T : class, new()
        {
            var channel = client.Connection.CreateModel();

            channel.ExchangeDeclare(exchange: exchange, type: "fanout");

            var queueName = channel.QueueDeclare().QueueName;

            channel.QueueBind(queue: queueName,
                              exchange: exchange,
                              routingKey: "");

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                var msg     = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(message);

                handler(msg);
            };
            channel.BasicConsume(queue: queueName,
                                 autoAck: true,
                                 consumer: consumer);
        }
Exemplo n.º 3
0
        private static void Main(string[] args)
        {
            RabbitMQClient.RabbitMQClient client = new RabbitMQClient.RabbitMQClient(new RabbitMQConfig()
            {
                HostName = "192.168.8.102",
                Port     = 5672,
                UserName = "******",
                Password = "******"
            });

            for (int i = 0; i < 20; i++)
            {
                Message message = new Message()
                {
                    a = i.ToString(),
                    b = "a" + i
                };
                Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(message));
                client.WorkQueuesPublish <Message>(message, "queue_task");
            }

            for (int i = 20; i < 40; i++)
            {
                Message message = new Message()
                {
                    a = i.ToString(),
                    b = "a" + i
                };
                Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(message));
                client.Publish <Message>(message, "logs");
            }

            Console.ReadLine();
        }
        /// <summary>
        /// 工作者订阅
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="queue"></param>
        /// <param name="handler"></param>
        public static void WorkQueuesSubscribe <T>(this RabbitMQClient client, string queue, Action <T> handler) where T : class, new()
        {
            var channel = client.Connection.CreateModel();

            channel.QueueDeclare(queue: queue,
                                 durable: true,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                T   msg     = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(message);

                handler(msg);
                channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
            };
            channel.BasicConsume(queue: queue,
                                 autoAck: false,
                                 consumer: consumer);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 发布消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="msg"></param>
        /// <param name="exchange"></param>
        public static void Publish <T>(this RabbitMQClient client, T msg, string exchange) where T : class, new()
        {
            using (var channel = client.Connection.CreateModel())
            {
                channel.ExchangeDeclare(exchange: exchange, type: "fanout");

                var message = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
                var body    = Encoding.UTF8.GetBytes(message);
                channel.BasicPublish(exchange: exchange,
                                     routingKey: "",
                                     basicProperties: null,
                                     body: body);
            }
        }
Exemplo n.º 6
0
 private static void Main(string[] args)
 {
     RabbitMQClient.RabbitMQClient client = new RabbitMQClient.RabbitMQClient(new RabbitMQConfig()
     {
         HostName = "192.168.8.102",
         Port     = 5672,
         UserName = "******",
         Password = "******"
     });
     client.WorkQueuesSubscribe <Message>("queue_task", m =>
     {
         Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(m));
         Thread.Sleep(1500);
     });
     Console.ReadLine();
 }
        /// <summary>
        /// 发布消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="client"></param>
        /// <param name="msg"></param>
        /// <param name="queue"></param>
        public static void WorkQueuesPublish <T>(this RabbitMQClient client, T msg, string queue) where T : class, new()
        {
            using (var channel = client.Connection.CreateModel())
            {
                channel.QueueDeclare(queue: queue,
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);

                var message = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
                var body    = Encoding.UTF8.GetBytes(message);

                var properties = channel.CreateBasicProperties();
                properties.Persistent = true;

                channel.BasicPublish(exchange: "",
                                     routingKey: queue,
                                     basicProperties: properties,
                                     body: body);
            }
        }
Exemplo n.º 8
0
 public QueueTest(RabbitMQClient.RabbitMQClient client, ILogger logger) : base(client, logger, "queue_task")
 {
 }
Exemplo n.º 9
0
 /// <summary>
 /// 发布订阅模式基类
 /// </summary>
 /// <param name="client"></param>
 /// <param name="exchange"></param>
 /// <param name="logger"></param>
 public PublishSubscribeBase(RabbitMQClient client, ILogger logger, string exchange)
 {
     _exchange   = exchange;
     this.client = client;
     this.logger = logger;
 }
 /// <summary>
 /// 消息队列基类
 /// </summary>
 /// <param name="client"></param>
 /// <param name="queue"></param>
 /// <param name="logger"></param>
 public WorkQueuesBase(RabbitMQClient client, ILogger logger, string queue)
 {
     _queue      = queue;
     this.client = client;
     this.logger = logger;
 }