石英调度器可以';在生产中添加RabbitMQ.dll后,无法运行

石英调度器可以';在生产中添加RabbitMQ.dll后,无法运行,rabbitmq,quartz-scheduler,Rabbitmq,Quartz Scheduler,在某个时间(一周)之前,我的应用程序运行良好。所有的调度程序都工作得很好。当时,我们使用MSMQ进行队列目的 现在,我们实现所有MSMQ并将其传输到RabbitMQ。RabbitMQ(具有优先级)工作正常,但现在quartz调度程序停止工作了吗 我们使用石英版本1.0.2.3 RabbitMQ版本3.6.0 有人能帮我解决这个问题吗 RabbitMQ代码段: var factory = GetConnectionFactory(); using (var connecti

在某个时间(一周)之前,我的应用程序运行良好。所有的调度程序都工作得很好。当时,我们使用MSMQ进行队列目的

现在,我们实现所有MSMQ并将其传输到RabbitMQ。RabbitMQ(具有优先级)工作正常,但现在quartz调度程序停止工作了吗

我们使用石英版本1.0.2.3 RabbitMQ版本3.6.0

有人能帮我解决这个问题吗

RabbitMQ代码段:

var factory = GetConnectionFactory();
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    IDictionary<String, Object> args = new Dictionary<String, Object>();
                    channel.BasicQos(0, 1, false);
                    args.Add("x-max-priority", 3);
                    channel.QueueDeclare(queueName, true, false, false, args);
                    var consumer = new QueueingBasicConsumer(channel);
                    channel.BasicConsume(queueName, false, "", args, consumer);
                    while (true)
                    {
                        var ea = consumer.Queue.Dequeue();

                        string message = Encoding.UTF8.GetString(ea.Body);
                        ProcessMessageFromQueue(message);
                        Log.Info("Message Received from " + queueName + ": "  + message + " , ChannelId : " + channel.NextPublishSeqNo + " ,ea:" + ea.DeliveryTag);
                        channel.BasicAck(ea.DeliveryTag, false);
                        //MessageQueueMessage messageQueueMessage = Utility.DeserializeObject<MessageQueueMessage>(message);
                        DeleteRedisVAriableByKey(message);
                    }
                }
            }

提前谢谢

这是线程的问题

我们有一个石英的螺纹数参数。假设它的值是10

我们在quartz启动作业时启动一个rabbitmq队列

您可以在上面的代码中看到,在rabbitmq启动方法中,有一个while循环。 所以它永远不会结束

在第二次触发作业后,它会再创建一个消费者,并且不会结束

一段时间后,线程接近线程限制

一旦线程达到线程限制,就不会创建新线程。它停止了我们的计划

NameValueCollection properties = null;
    ISchedulerFactory sf = null;
    IScheduler sched = null;
    JobDetail jobDetail = null;
    Quartz.CronTrigger trigger = null;

    properties = new NameValueCollection();
    properties["quartz.scheduler.instanceName"] = "RemoteServer";
    properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
    properties["quartz.threadPool.threadCount"] = "5";
    properties["quartz.threadPool.threadPriority"] = "Normal";
    sf = new StdSchedulerFactory(properties);
    sched = sf.GetScheduler();
    sched.Start();              
    jobDetail = new JobDetail("MyJOb", "default", typeof(MyClass));
    trigger = new CronTrigger("MyTrigger", "default", ConfigurationManager.AppSettings["CronExpression"]);
    sched.ScheduleJob(jobDetail, trigger);