Example #1
0
        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);
                }
            }
        }
Example #2
0
        // 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 + "건 처리완료";
        }
Example #3
0
        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);
        }