/// <summary> /// Testing MQ send /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonSend_Click(object sender, EventArgs e) { try { MQSender mqSender = new MQSender(); MQConnection mqcon = new MQConnection(); mqcon.Init("1", ConfigurationSettings.AppSettings["MQHOST"], int.Parse(ConfigurationSettings.AppSettings["MQPORT"]), ConfigurationSettings.AppSettings["MQName"]); mqcon.Open(); //mqSender.Init(ConfigurationSettings.AppSettings["Test_2591"], mqcon); mqSender.Init(ConfigurationSettings.AppSettings["Test_2591"], mqcon); MQMessage msg = new MQMessage(); msg.HeaderMcd.McdType = MQMessage.MQHeaderMcd.Request; msg.HeaderUser.UserBaseDate.Value = DateTime.Now.ToShortDateString(); msg.HeaderUser.UserServiceId.Value = "11"; msg.HeaderUser.UserServiceStatus.Value = "0"; msg.HeaderUser.UserServiceGuage.Value = "0"; msg.HeaderUser.UserServiceGuageInfo.Value = String.Empty; msg.HeaderUser.UserUserId.Value = "12"; msg.HeaderUser.UserTaskCode.Value = "1290"; msg.Text = "MQ test 消息"; mqSender.SendMessage(msg); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// ������Ϣ������ʧ�ܣ����׳��쳣 /// </summary> /// <param name="aMessage">MQ��Ϣ</param> public void SendMessage(MQMessage aMessage) { try { Produce(_queueName, aMessage); } catch(Exception exp) { Log4.LogHelper.Write(Log4.LogLevel.Error, exp.ToString()); throw new Exception("����MQ��Ϣʧ�ܣ�������������������MQ���������У����Ժ����ԡ�"); } }
/// <summary> /// 处理消息反馈 /// </summary> /// <param name="aMessage"></param> public void OnMessageReceiver_CallBack(MQMessage aMessage) { MessageData msgdata = ConvertMessage(aMessage); AidLogHelper.Write(xQuant.Log4.LogLevel.Debug, string.Format("MQ已接收到消息(MQHandlerSync),GUID={0}", msgdata.MessageID)); if (!Inited) { Init(); } try { bool isAsyncSocket = false; if (msgdata != null) { msgdata.FirstTime = DateTime.Now; if (isAsyncSocket) { OnMessageHandleAsync(msgdata); } else { DispatchMsg(msgdata); } } } catch (Exception ex) { try { StringBuilder sb = new StringBuilder("从MQ接收到消息后处理发生异常!(MQHandlerSync)"); SendToMQ(msgdata, new byte[1] { 0 }, sb.ToString()); sb.AppendLine(); sb.AppendFormat("GUID={0},Exception.Message:{1}.", msgdata.MessageID, ex.Message); sb.AppendLine(); sb.AppendFormat("Stack Trace:{0}.", ex.StackTrace); //CommonHelper.AddEventLog(EventSourceName, sb.ToString()); AidLogHelper.Write(xQuant.Log4.LogLevel.Error, sb.ToString()); } catch { } } }
private MessageData ConvertMessage(MQMessage mqmsg) { if (mqmsg == null) { return null; } MessageData data = new MessageData(); string msgid = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "GUID"); if (!String.IsNullOrEmpty(msgid)) { data.MessageID = new Guid(msgid); } else { return null; } data.BizMsgID = mqmsg.HeaderUser.UserServiceId.Value; bool isSingle = true; string mpkgFlag = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "PKGTYPE"); if (!String.IsNullOrEmpty(mpkgFlag)) { if (bool.TryParse(mpkgFlag, out isSingle)) { data.IsMultiPackage = !isSingle; } else { data.IsMultiPackage = false; } } else { return null; } string platform = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "TARGETSYS"); if (!String.IsNullOrEmpty(platform)) { data.TragetPlatform = (PlatformType)Enum.Parse(typeof(PlatformType), platform); } else { return null; } string sourceIP = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "IP"); if (!String.IsNullOrEmpty(sourceIP)) { data.SourceIP = sourceIP; } data.ReqPackageList.Enqueue(new PackageData(1, mqmsg.Byte)); return data; }
///// <summary> ///// ///// </summary> ///// <returns></returns> private MQMessage GetMessage(String msgId, Guid id, PlatformType targetSys, bool isSinglePkg, String sourceIP, String definedError) { MQMessage msg = new MQMessage(); msg.HeaderUser.UserServiceId.Value = msgId; msg.HeaderMcd.McdType = MQMessage.MQHeaderMcd.Request; //msg.HeaderUser.UserBaseDate.Value = DateTimeHelper.NowDateToString; //msg.HeaderUser.UserServiceId.Value = id.ToString(); msg.HeaderUser.UserServiceStatus.Value = "0"; msg.HeaderUser.UserServiceGuage.Value = "0"; msg.HeaderUser.UserServiceGuageInfo.Value = ""; msg.HeaderUser.UserTaskCode.Value = ""; msg.HeaderUser.UserUserId.Value = ""; msg.HeaderUser.UserDefined.Add(new MQParameter<string>("TARGETSYS", targetSys.ToString())); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("PKGTYPE", isSinglePkg.ToString())); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("GUID", id.ToString())); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("ERROR", definedError)); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("IP", sourceIP)); return msg; }
public static MessageData FromMQMessage(MQMessage mqmsg, out string error) { error = ""; if (mqmsg == null) { return null; } MessageData data = new MessageData(); string msgid = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "GUID"); if (!String.IsNullOrEmpty(msgid)) { data.MessageID = new Guid(msgid); } else { return null; } data.BizMsgID = mqmsg.HeaderUser.UserServiceId.Value; bool isSingle = true; string mpkgFlag = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "PKGTYPE"); if (!String.IsNullOrEmpty(mpkgFlag)) { if (bool.TryParse(mpkgFlag, out isSingle)) { data.IsMultiPackage = !isSingle; } else { data.IsMultiPackage = false; } } else { return null; } string platform = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "TARGETSYS"); if (!String.IsNullOrEmpty(platform)) { data.TragetPlatform = (PlatformType)Enum.Parse(typeof(PlatformType), platform); } else { return null; } string sourceIP = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "IP"); if (!String.IsNullOrEmpty(sourceIP)) { data.SourceIP = sourceIP; } data.RespPackageList.Enqueue(new PackageData(1, mqmsg.Byte)); error = FindDefinedParameterValue(mqmsg.HeaderUser.UserDefined, "ERROR"); //if (!String.IsNullOrEmpty(error)) //{ // throw new Exception(string.Format("解析MQ消息,GUID={0};ERROR={1};", data.MessageID, error)); //} return data; }
/// <summary> /// ����MQ��Ϣͷ����ѡ���� /// </summary> /// <param name="mqMessage">MQMessage</param> /// <returns>����ѡ����</returns> public static string ParseSelector(MQMessage mqMessage) { StringBuilder selector = new StringBuilder(); if (mqMessage.HeaderMcd.McdType != null) selector.AppendFormat("{0}='{1}'", XMSC.JMS_TYPE, mqMessage.HeaderMcd.McdType); if (mqMessage.HeaderMcd.MessageId != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", XMSC.JMS_MESSAGEID, mqMessage.HeaderMcd.MessageId); } if (mqMessage.HeaderUser.UserServiceId.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserServiceId.Name, mqMessage.HeaderUser.UserServiceId.Value); } if (mqMessage.HeaderUser.UserServiceStatus.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserServiceStatus.Name, mqMessage.HeaderUser.UserServiceStatus.Value); } if (mqMessage.HeaderUser.UserServiceGuage.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserServiceGuage.Name, mqMessage.HeaderUser.UserServiceGuage.Value); } if (mqMessage.HeaderUser.UserBaseDate.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserBaseDate.Name, mqMessage.HeaderUser.UserBaseDate.Value); } if (mqMessage.HeaderUser.UserUserId.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserUserId.Name, mqMessage.HeaderUser.UserUserId.Value); } if (mqMessage.HeaderUser.UserTaskCode.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", mqMessage.HeaderUser.UserTaskCode.Name, mqMessage.HeaderUser.UserTaskCode.Value); } foreach (MQParameter<string> list in mqMessage.HeaderUser.UserDefined) { if (list.Value != null) { if (selector.Length > 0) selector.Append(" and "); selector.AppendFormat("{0}='{1}'", list.Name, list.Value); } } return selector.ToString(); }
/// <summary> /// 处理从同步MQ结束后的消息反馈 /// </summary> /// <param name="aMessage"></param> public void OnMessageReceiver_CallBack(MQMessage aMessage) { try { PerformReceiverAsync(aMessage); } catch (Exception ex) { xQuant.Log4.LogHelper.Write(xQuant.Log4.LogLevel.Error, string.Format("接收处理后发生异常!Exception:{0}!\r\nStackTrace:{1}!", ex.Message,ex.StackTrace)); } }
/// <summary> /// 异步回调接收后的处理 /// </summary> /// <param name="mqmsg"></param> private void PerformReceiverAsync(MQMessage mqmsg) { string error = ""; MessageData msgdata = MQMsgCommonHelper.FromMQMessage(mqmsg, out error); xQuant.Log4.LogHelper.Write(xQuant.Log4.LogLevel.Debug, string.Format("异步接收MQ返回!GUID:{0}.Error:{1}.", msgdata.MessageID, error)); if (_receiverManager.GetSemaphore(msgdata.MessageID) == null) { //过期消息 AfterReceivedAsync(msgdata, error, MsgLogState.RecvOverdue); } else { if (string.IsNullOrEmpty(error)) { //正常接收并无错误 AfterReceivedAsync(msgdata, "已接收到报文!", MsgLogState.RecvSucceed); } else { //接收过程中,在服务端发生错误 AfterReceivedAsync(msgdata, error, MsgLogState.RecvFailed); } } }
/// <summary> /// 同步接收后处理 /// </summary> /// <param name="recmq"></param> /// <returns></returns> private MessageData PerformReceiverSync(MQMessage recmq, out string error) { try { error = ""; MessageData msgdata = MQMsgCommonHelper.FromMQMessage(recmq, out error); return msgdata; } catch (Exception ex) { throw new AidException(MsgHandlerEntry.MQ_Exception_Title, ex.Message, ex); } }
private MQMessage GetMessage(String msgId, Guid id, PlatformType targetSys, bool isSinglePkg) { MQMessage msg = new MQMessage(); msg.HeaderUser.UserServiceId.Value = msgId; msg.HeaderMcd.McdType = MQMessage.MQHeaderMcd.Request; msg.HeaderUser.UserServiceStatus.Value = "0"; msg.HeaderUser.UserServiceGuage.Value = "0"; msg.HeaderUser.UserServiceGuageInfo.Value = ""; msg.HeaderUser.UserTaskCode.Value = ""; //msg.HeaderUser.UserUserId.Value = USER_CODE; msg.HeaderUser.UserDefined.Add(new MQParameter<string>("TARGETSYS", targetSys.ToString())); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("PKGTYPE", isSinglePkg.ToString())); msg.HeaderUser.UserDefined.Add(new MQParameter<string>("GUID", id.ToString())); return msg; }
/// <summary> /// �����Ѷ�������Ļص����� /// </summary> /// <param name="msg">�Ѷ��ĵ���Ϣ</param> private void OnMessageListener(IMessage msg) { if (msg != null) { try { MQMessage mqMessage = new MQMessage(); mqMessage.ParseMessage(msg); if (_messageReceiveCallBack != null) _messageReceiveCallBack(mqMessage); } catch (Exception ex) { xQuant.Log4.LogHelper.Write(xQuant.Log4.LogLevel.Error, String.Format("{0}.OnMessageCallback Exception:\n{1}", GetType().FullName, ex)); } } }
private void MessageReceiver_Callback(MQMessage aMessage) { try { switch (aMessage.HeaderMcd.McdType) { case MQMessage.MQHeaderMcd.Response: MessageBox.Show(aMessage.Text); break; case MQMessage.MQHeaderMcd.Result: MessageBox.Show(aMessage.Text); break; case MQMessage.MQHeaderMcd.Request: default: return; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }