public string Send( MqSettingT sets, String body, Dictionary <String, string> propMessage ) { ChekSettings(sets); MqMessageGeneric msg = new MqMessageGeneric(); msg.Body = body.GetNullIfIsNullOrWhiteSpace(); foreach (var item in propMessage) { msg.AddedProperties.Add(item.Key, item.Value); } if (msg.Body.IsNullOrWhiteSpace()) { throw new ArgumentException("Пустое тело сообщения"); } var clnt = IBMMqClient.CreateClient(sets); clnt.Send(msg); StringBuilder sb = new StringBuilder(msg.MessageID.Length * 2); foreach (var b in msg.MessageID) { sb.AppendFormat("{0:X2}", b); } return(sb.ToString()); }
/// <summary> /// Посыл /// </summary> public void Send(MqMessageGeneric MqMessage) { String qname = this.queueName; if (String.IsNullOrWhiteSpace(qname)) { throw new ArgumentNullException("Не определено имя очереди"); } try { message = new MQMessage(); message.Persistence = MQC.MQPER_PERSISTENT; message.Format = MQC.MQFMT_STRING; message.CharacterSet = MQC.CODESET_UTF; foreach (var prop in MqMessage.AddedProperties) { message.SetStringProperty(prop.Key, prop.Value); } message.Write(Encoding.UTF8.GetBytes(MqMessage.Body)); SendMqMessage(qname); MqMessage.MessageID = message.MessageId; message = null; } catch (MQException mqex) { message = null; throw new InvalidOperationException(String.Format("MQ {0}", mqex.Message)); } catch { throw; } }
public MqMessageGeneric GetNextMessage() { MqMessageGeneric res = null; String qname = this.queueName; if (String.IsNullOrWhiteSpace(qname)) { throw new ArgumentNullException("Не определено имя очереди"); } var getMessageOptions = new MQGetMessageOptions(); getMessageOptions.Options = MQC.MQGMO_WAIT + MQC.MQGMO_SYNCPOINT; getMessageOptions.WaitInterval = 100; // 1 seconds wait try { if (mqManager == null) { mqManager = createManager(); } message = new MQMessage(); using (var queue = mqManager.AccessQueue(queueName, MQC.MQOO_INQUIRE)) if (queue.CurrentDepth == 0) { return(res); } using (var q = mqManager.AccessQueue(qname, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING)) q.Get(message, getMessageOptions); res = new MqMessageGeneric(); res.Body = Encoding.UTF8.GetString(message.ReadBytes(message.MessageLength)); res.MessageID = message.MessageId; res.PutDateTime = message.PutDateTime; var inames = message.GetPropertyNames("%"); if (inames != null) { while (inames.MoveNext()) { String name = inames.Current.ToString(); if (name.ToLower().Contains("jms") || name.ToLower().Contains("mcd")) { continue; } res.AddedProperties.Add(name, message.GetStringProperty(name)); } } } catch (MQException mqex) { RollbackGet(); message = null; if (mqex.ReasonCode == 2033 && mqex.CompCode == 2) // В очереди нет сообщений { return(null); } throw new InvalidOperationException(String.Format("MQ {0}", mqex.Message)); } catch { RollbackGet(); throw; } return(res); }