private void bw_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; // Loop while (true) { //CancellationPending 속성이 true로 set되었다면(위에서 CancelAsync 메소드 호출 시 true로 set된다고 하였죠? if ((worker.CancellationPending == true)) { //루프를 break한다.(즉 스레드 run 핸들러를 벗어나겠죠) e.Cancel = true; break; } else { //메시지 수신 MqRecvVo mrvo = RabbitConsumer.getRevcMessages(); if (mrvo != null) { logger.Debug("bw_DoWork req_typ : " + mrvo.req_typ); worker.ReportProgress(0, mrvo); } System.Threading.Thread.Sleep(500); } } }
// Agent 업무처리 private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) { msg_cnt++; txtStatusBar.Text = msg_cnt + "건 처리중"; MqRecvVo mrvo = (MqRecvVo)e.UserState; logger.Debug("ProgressChanged req_typ : " + mrvo.req_typ); if (mrvo.req_typ == "HLTH") { MqSendHealthVo msVo = new MqSendHealthVo(); msVo.agent_id = mrvo.agent_id; msVo.agent_status = RabbitConsumer.AgentStatus; msVo.res_typ = mrvo.req_typ; RabbitProducer.Connect(); RabbitProducer.MqSendMessages(mrvo.agent_id, msVo.toJson()); RabbitProducer.Disconnect(); logger.Debug("agent_id : " + msVo.agent_id); } else { //실행시작 MqSendVo msVo = new MqSendVo(); msVo.res_typ = "RLT"; msVo.agent_id = mrvo.agent_id; msVo.agent_status = "BUSY"; msVo.job_status = "ING"; msVo.rlt_data = ""; msVo.exec_req_id = mrvo.exec_req_id; logger.Debug("ProgressChanged exec start : " + msVo.toJson()); RabbitConsumer.AgentStatus = msVo.agent_status; logger.Debug("ProgressChanged AgentStatus : " + RabbitConsumer.AgentStatus); //상태변경 RabbitProducer.Connect(); RabbitProducer.MqSendMessages(mrvo.agent_id, msVo.toJson()); RabbitProducer.Disconnect(); // 작업실행 String result = AgentExecutor.Execute(mrvo.req_typ, mrvo.req_data, mrvo.job_tmout); msVo.agent_status = "IDLE"; msVo.job_status = "CMP"; msVo.rlt_data = result; logger.Debug("ProgressChanged exec result : " + msVo.toJson()); RabbitConsumer.AgentStatus = msVo.agent_status; logger.Debug("ProgressChanged AgentStatus : " + RabbitConsumer.AgentStatus); //결과전송 RabbitProducer.Connect(); RabbitProducer.MqSendMessages(mrvo.agent_id, msVo.toJson()); RabbitProducer.Disconnect(); } txtStatusBar.Text = msg_cnt + "건 처리완료"; }
public static MqRecvVo getRevcMessages() { BasicDeliverEventArgs ea = null; try { ea = consumer.Queue.Dequeue(); } catch (EndOfStreamException endOfStreamException) { logger.Error(endOfStreamException); } MqRecvVo mrVo = null; if (ea != null) { byte[] body = ea.Body; string message = System.Text.Encoding.UTF8.GetString(body); logger.Debug(message); mrVo = new MqRecvVo(message); if (mrVo.req_typ == "HLTH")//에이전트 상태 확인 { channel.BasicAck(ea.DeliveryTag, false); } else //Job 실행요청 { logger.Debug("getRevcMessages AgentStatus ==> " + AgentStatus); if (AgentStatus != "IDLE") //실행가능 { if (mrVo.req_typ == "PY") //파이썬 실행 { channel.BasicAck(ea.DeliveryTag, false); } else if (mrVo.req_typ == "RST")//REST 실행 { channel.BasicAck(ea.DeliveryTag, false); } } else// 나중에 다시 처리 { channel.BasicAck(ea.DeliveryTag, true); } } } return(mrVo); }