Esempio n. 1
0
File: MqBL.cs Progetto: ewin66/Arcas
        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());
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
        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);
        }