いつか(1週間前)、私のアプリケーションは完全に動作していました。すべてのスケジューラが完全に動作していました。その時点では、キューの目的にMSMQを使用します。生産時にRabbitMQ.dllを追加した後、クォーツスケジューラを実行できません
ここで、すべてのMSMQを実装し、RabbitMQに転送します。 RabbitMQ(優先度付き)は完璧に動作していますが、現在は石英スケジューラが停止していますか?
我々は石英バージョン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);
}
}
}
スケジューラスニペット - 事前に
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);
感謝!!