/// <summary>
        /// Constructor that retrieve the queue related information
        /// for MessageQueueConfiguration object
        /// </summary>
        /// <param name="queueName">the name of the queue</param>
        public MQSeries(string queueName)
        {
            cm = (ConfigurationManager)ConfigurationSettings.GetConfig("Framework");
            XmlNode queueInfo = cm.MessageQueueConfig.RetrieveQueueInformation("*[@name='" + queueName + "']");

            queueManager = queueInfo.SelectSingleNode("QueueManager").InnerText;
            QueueName    = queueInfo.SelectSingleNode("QueueName").InnerText;
            sleepTime    = Int32.Parse(queueInfo.SelectSingleNode("SleepTime").InnerText);
            queueSession = new MQSessionClass();
        }
        /// <summary>
        /// 打开连接
        /// </summary>
        public void Open()
        {
            base.Init();

            switch (MQMode)
            {
            case MQMode.Queue:
                MQConsumer = MQSession.CreateConsumer(new ActiveMQQueue(this.QueueName));
                break;

            case MQMode.Topic:
                MQConsumer = MQSession.CreateConsumer(new ActiveMQTopic(this.QueueName));
                break;
            }
        }
        /// <summary>
        /// 关闭连接
        /// </summary>
        public void Close()
        {
            IMessageProducer _mqProducer = null;

            foreach (var item in this.MQProducerDic)
            {
                if (MQProducerDic.TryGetValue(item.Key, out _mqProducer))
                {
                    _mqProducer?.Close();
                }
            }
            MQProducerDic.Clear();
            if (MQSession != null)
            {
                MQSession.Close();
            }
            if (MQCnnection != null)
            {
                MQCnnection.Close();
            }
        }
Beispiel #4
0
        internal byte[][] GetTags(int requestedNumber, MQSession remoteSession)
        {
            uint method = 0;
            bool flag   = CommonServices.TraceStatus();

            byte[][] bufferArray = new byte[requestedNumber][];
            int      cc          = 0;
            int      rc          = 0;

            try
            {
                int               num10;
                int               num11;
                int               num12;
                int               num13;
                int               num14;
                MQSPI             mqspi   = null;
                MQSPIReserveInOut @out    = null;
                int               version = 1;
                MQSPIReserveIn    @in     = null;
                int               num5    = 1;
                MQSPIReserveOut   out2    = null;
                int               num6    = 1;
                MQTSH             tsh     = null;
                MQTSH             rTSH    = null;
                int               offset  = remoteSession.IsMultiplexingEnabled ? 0x24 : 0x1c;
                MQAPI             mqapi   = new MQAPI();
                mqapi.GetLength();
                int num9 = num10 = num11 = num12 = num13 = num14 = 0;
                cc = 2;
                rc = 0x893;
                for (int i = 0; i < requestedNumber; i++)
                {
                    bufferArray[i] = new byte[this.tagSize];
                    if (this.indexIssued >= this.maxIndex)
                    {
                        base.TrText("Requesting Server for Tag Reservation");
                        int num7 = offset;
                        mqspi                  = new MQSPI();
                        @out                   = new MQSPIReserveInOut(version);
                        @in                    = new MQSPIReserveIn(num5);
                        out2                   = new MQSPIReserveOut(num6);
                        mqspi.VerbId           = 6;
                        mqspi.OutStructVersion = out2.Version;
                        mqspi.OutStructLength  = out2.Length;
                        int translength = (((offset + mqapi.GetLength()) + mqspi.GetLength()) + @out.GetVersionLength()) + Math.Max(mqspi.OutStructLength, @in.GetVersionLength());
                        tsh = remoteSession.AllocateTSH(140, 0, true, translength);
                        byte[] tshBuffer = tsh.TshBuffer;
                        mqapi.Initialize(translength, -1);
                        @out.Version       = version;
                        @in.Version        = num5;
                        @in.TagSize        = this.tagSize;
                        @in.TagReservation = 0x100;
                        num7 += mqapi.WriteStruct(tshBuffer, offset);
                        num9  = num7;
                        num11 = num10 = num7 += mqspi.WriteStruct(tshBuffer, num7);
                        num13 = num12 = num7 += @out.WriteStruct(tshBuffer, num7);
                        num14 = num7 += @in.WriteStruct(tshBuffer, num7);
                        tsh.WriteStruct(tshBuffer, 0);
                        if (flag)
                        {
                            base.TrAPI(method, "__________");
                            base.TrAPI(method, "GetTags >>");
                            base.TrData(method, 0, "Hconn", BitConverter.GetBytes(remoteSession.Hconn.Value));
                            base.TrData(method, 0, "MQSPI", num9, num10 - num9, tshBuffer);
                            base.TrData(method, 0, "SPI_In_Out_Structure", num11, num12 - num11, tshBuffer);
                            base.TrData(method, 0, "SPI_Input_Structure", num13, num14 - num13, tshBuffer);
                            base.TrAPIOutput(method, "CompCode");
                            base.TrAPIOutput(method, "Reason");
                        }
                        tsh.TshBuffer = tshBuffer;
                        num7          = 0;
                        remoteSession.SendTSH(tsh);
                        tshBuffer = null;
                        rTSH      = remoteSession.ReceiveTSH(null);
                        byte segmentType = rTSH.SegmentType;
                        if (segmentType == 5)
                        {
                            MQERD mqerd = new MQERD();
                            if (rTSH.Length > offset)
                            {
                                mqerd.ReadStruct(rTSH.TshBuffer, rTSH.Offset);
                            }
                            throw mqerd.ErrorException(remoteSession.ParentConnection.NegotiatedChannel.ChannelName.Trim());
                        }
                        if (segmentType != 0x9c)
                        {
                            CommonServices.SetValidInserts();
                            CommonServices.ArithInsert1   = rTSH.SegmentType;
                            CommonServices.CommentInsert1 = remoteSession.ParentConnection.NegotiatedChannel.ChannelName.Trim();
                            base.FFST("%Z% %W%  %I% %E% %U%", "%C%", method, 1, 0x20009504, 0);
                            throw MQERD.ErrorException(13, rTSH.SegmentType, remoteSession.ParentConnection.NegotiatedChannel.ChannelName.Trim().Trim());
                        }
                        rTSH.Offset = mqapi.ReadStruct(rTSH.TshBuffer, rTSH.Offset);
                        cc          = mqapi.mqapi.CompCode;
                        rc          = mqapi.mqapi.Reason;
                        if (cc == 2)
                        {
                            return(bufferArray);
                        }
                        rTSH.Offset = mqspi.ReadStruct(rTSH.TshBuffer, rTSH.Offset);
                        rTSH.Offset = @out.ReadStruct(rTSH.TshBuffer, rTSH.Offset);
                        rTSH.Offset = out2.ReadStruct(rTSH.TshBuffer, rTSH.Offset);
                        if (rTSH != null)
                        {
                            remoteSession.ReleaseReceivedTSH(rTSH);
                        }
                        int num17             = 0;
                        int actualReservation = out2.ActualReservation;
                        if (actualReservation <= 0x100)
                        {
                            num17 = 0x100;
                        }
                        else
                        {
                            base.TrText("Unexpected tag reservation allocation: " + actualReservation + "MQRC_UNEXPECTED_ERROR");
                            cc = 2;
                            rc = 0x893;
                            base.throwNewMQException(cc, rc);
                        }
                        this.tagIncrementIndex = out2.TagIncrementOffset - 1;
                        if ((this.tagIncrementIndex < 0) || (this.tagIncrementIndex >= this.tagSize))
                        {
                            cc = 2;
                            rc = 0x893;
                            if (flag)
                            {
                                base.TrException(method, new Exception("Unexpected tag increment offset supplied by server: " + out2.TagIncrementOffset + "MQRC_UNEXPECTED_ERROR"));
                            }
                            base.throwNewMQException(cc, rc);
                        }
                        this.baseTag     = new byte[this.tagSize];
                        this.baseTag     = out2.BaseReservationTag;
                        this.indexIssued = 0;
                        this.indexIssued = this.baseTag[this.tagIncrementIndex];
                        if ((this.indexIssued + actualReservation) > num17)
                        {
                            cc = 2;
                            rc = 0x893;
                            base.TrException(method, new Exception("Queue manager returned counter which will wrap MQRC_UNEXPECTED_ERROR"));
                            base.throwNewMQException(cc, rc);
                        }
                        Array.Copy(this.baseTag, 0, bufferArray[i], 0, this.tagSize);
                        this.maxIndex = (this.indexIssued + actualReservation) - 1;
                    }
                    else
                    {
                        base.TrText(method, "Alloting the ID's from Reserved Pool");
                        this.indexIssued++;
                        Array.Copy(this.baseTag, 0, bufferArray[i], 0, this.tagSize);
                        bufferArray[i][this.tagIncrementIndex] = (byte)this.indexIssued;
                        cc = 0;
                        rc = 0;
                    }
                }
            }
            finally
            {
                if (flag)
                {
                    base.TrAPI(method, "__________");
                    base.TrAPI(method, "<< GetTags ");
                    base.TrData(method, 0, "Hconn", BitConverter.GetBytes(remoteSession.Hconn.Value));
                    base.TrAPIOutput(method, "CompCode");
                    base.TrAPIOutput(method, "Reason");
                }
            }
            return(bufferArray);
        }
Beispiel #5
0
 /// <summary>
 /// �Ƴ�Session
 /// </summary>
 /// <param name="mqSession">MQSession����</param>
 internal void RemoveSession(MQSession mqSession)
 {
     lock (_mqSessions)
     {
         _mqSessions.Remove(mqSession.SessionName);
     }
 }
Beispiel #6
0
 /// <summary>
 /// ����MQSession
 /// </summary>
 /// <param name="mqSession">MQSession����</param>
 internal void AddSession(MQSession mqSession)
 {
     lock (_mqSessions)
     {
         if (!_mqSessions.ContainsKey(mqSession.SessionName))
             _mqSessions.Add(mqSession.SessionName, mqSession);
     }
 }
 /// <summary>
 /// 关闭连接
 /// </summary>
 public void Close()
 {
     MQConsumer?.Close();
     MQSession?.Close();
     MQCnnection?.Close();
 }