コード例 #1
0
 private void Reconnect(ref MQQueueManager queueManager, ref MQTopic topic, string topicName)
 {
     try
     {
         LogMsg(string.Format("开始重连MQ:{0},{1}", host, topicName));
         try
         {
             if (queueManager != null)
             {
                 queueManager.Disconnect();
             }
             if (topic != null)
             {
                 topic.Close();
             }
         }
         catch (Exception e)
         {
             LogMsg("释放连接失败" + e);
         }
         queueManager = new MQQueueManager(uri, properties);
         topic        = queueManager.AccessTopic(topicName, null,
                                                 MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_RESUME,
                                                 null, DurableSubscriptionName);
         LogMsg(string.Format("重连MQ成功:{0},{1}", host, topicName));
         if (ReconnectEvent != null)
         {
             ReconnectEvent(this.Tag, null);
         }
     }
     catch (Exception ex)
     {
         LogMsg(string.Format("重连MQ失败:host:{0},exp:{1}", host, ex));
     }
 }
コード例 #2
0
        public void TopicPublish_Ok()
        {
            var message = "PublishInTopic";

            using (var broker = MQQueueManager.Connect(QueueManagerName, 0, Channel, ConnectionInfo))
                using (var topic = new MQTopic(broker, TopicName, string.Empty, MQC.MQTOPIC_OPEN_AS_PUBLICATION, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING))
                {
                    var outgoing = new MQMessage()
                    {
                        CharacterSet = MQC.CODESET_UTF,
                        Encoding     = MQC.MQENC_NORMAL
                    };
                    outgoing.WriteString(message);
                    topic.Publish(outgoing, new MQPutMessageOptions());
                }

            using (var broker = MQQueueManager.Connect(QueueManagerName, 0, Channel, ConnectionInfo))
                using (var q = broker.AccessQueue("QL.R4.EMPLEADOSANDREANI.SUBSCRIBER", MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING))
                {
                    var incoming            = new MQMessage();
                    MQGetMessageOptions gmo = new MQGetMessageOptions();
                    gmo.WaitInterval = (int)TimeSpan.FromSeconds(30).TotalMilliseconds; //MQC.MQWI_UNLIMITED;
                    gmo.Options     |= MQC.MQGMO_WAIT;
                    gmo.Options     |= MQC.MQGMO_SYNCPOINT;
                    q.Get(incoming, gmo);
                    Assert.AreEqual(message, incoming.ReadString(incoming.DataLength));
                }
        }
コード例 #3
0
 public void OpenTopic_Ok()
 {
     using (var broker = MQQueueManager.Connect(QueueManagerName, 0, Channel, ConnectionInfo))
     {
         var topic = new MQTopic(broker, TopicName, string.Empty, MQC.MQTOPIC_OPEN_AS_PUBLICATION, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
         Assert.AreNotEqual(MQC.MQHC_UNUSABLE_HCONN, topic.Handle);
         Assert.AreNotEqual(MQC.MQHC_DEF_HCONN, topic.Handle);
         topic.Close();
     }
 }
コード例 #4
0
        private void PublishMessage()
        {
            // txMessage.Text = "Publishing...";
            try
            {
                //_mqHelper.Host = txHost.Text;
                //_mqHelper.Port = Int32.Parse(txPort.Text);
                _mqHelper.QueueManager = txQMgr.Text;
                //_mqHelper.Channel = txQChannel.Text;
                _mqHelper.ProducerQueue = txQName.Text;
                //_mqHelper.MQType = MQXMSHelper.MQTypes.TOPIC;

                // option 1: WMQ
                // MQQueueManager queueManager = null;
                MQTopic   topic   = null;
                MQMessage message = null;
                string    msg     = txMessage.Text.ToString();

                Hashtable properties = new Hashtable();
                properties = new Hashtable();
                properties.Add(IBM.WMQ.MQC.HOST_NAME_PROPERTY, _mqHelper.Host);
                properties.Add(IBM.WMQ.MQC.PORT_PROPERTY, _mqHelper.Port);
                properties.Add(IBM.WMQ.MQC.CHANNEL_PROPERTY, _mqHelper.Channel);
                properties.Add(IBM.WMQ.MQC.TRANSPORT_PROPERTY, IBM.WMQ.MQC.TRANSPORT_MQSERIES_CLIENT); //unmanaged, or use TRANSPORT_MQSERIES_MANAGED

                // queueManager = new MQQueueManager(_mqHelper.QueueManager, properties);
                queueManager = new MQQueueManager(_mqHelper.QueueManager);
                // MessageBox.Show("Queue Manager created as:" + Environment.NewLine + "Host:" + _mqHelper.Host + Environment.NewLine + "Port:" + _mqHelper.Port + Environment.NewLine + "Channel:" + _mqHelper.Channel + Environment.NewLine + "Queue Manager:" + _mqHelper.QueueManager);
                // MessageBox.Show("Queue Manager created!");
                // Note: API signiture is confusing, the 1st parameter of AccessTopic is actually Topic String, NOT Topic Name
                topic = queueManager.AccessTopic(_mqHelper.ProducerQueue, null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_PUBLICATION, IBM.WMQ.MQC.MQOO_OUTPUT + IBM.WMQ.MQC.MQOO_FAIL_IF_QUIESCING);
                // topic = queueManager.AccessTopic(_mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, IBM.WMQ.MQC.MQSO_CREATE | IBM.WMQ.MQC.MQSO_FAIL_IF_QUIESCING | IBM.WMQ.MQC.MQSO_MANAGED | IBM.WMQ.MQC.MQSO_DURABLE);
                // topic = new MQTopic(queueManager, "TEST1", null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_PUBLICATION, IBM.WMQ.MQC.MQSO_CREATE + IBM.WMQ.MQC.MQSO_FAIL_IF_QUIESCING);

                message = new MQMessage();
                message.WriteString(msg);
                // MQPutMessageOptions mqpo = new MQPutMessageOptions();
                topic.Put(message);
                // queueManager.Put(IBM.WMQ.MQC.MQOT_TOPIC, null, _mqHelper.QueueManager, _mqHelper.ProducerQueue, message);
                MessageBox.Show("Message " + message.MessageLength + " published to " + _mqHelper.ProducerQueue);

                topic.Close();
                //MessageBox.Show(MQEnvironment.properties.Count + "");
                queueManager.Disconnect();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.Source + Environment.NewLine + ex.GetBaseException());
            }
        }
コード例 #5
0
        /// <summary>
        /// paired with PublishMessage()
        /// </summary>
        private void SubscribeMessage()
        {
            tmrSubscribe.Enabled = true;

            //_mqHelper.Host = txHost.Text;
            //_mqHelper.Port = Int32.Parse(txPort.Text);
            _mqHelper.QueueManager = txQMgr.Text;
            //_mqHelper.Channel = txQChannel.Text;
            _mqHelper.ConsumerQueue = txQName.Text;
            //_mqHelper.MQType = MQXMSHelper.MQTypes.TOPIC;

            // option 1 WMQ APIs
            try
            {
                // mq properties
                Hashtable properties = new Hashtable();
                properties.Add(IBM.WMQ.MQC.HOST_NAME_PROPERTY, _mqHelper.Host);
                properties.Add(IBM.WMQ.MQC.PORT_PROPERTY, _mqHelper.Port);
                properties.Add(IBM.WMQ.MQC.CHANNEL_PROPERTY, _mqHelper.Channel);
                properties.Add(IBM.WMQ.MQC.TRANSPORT_PROPERTY, IBM.WMQ.MQC.TRANSPORT_MQSERIES_CLIENT); // or TRANSPORT_MQSERIES_MANAGED
                // properties.Add(IBM.WMQ.MQC.USER_ID_PROPERTY, "omsuat3");
                // properties.Add(IBM.WMQ.MQC.PASSWORD_PROPERTY, "Bch20195");

                // queueManager = new MQQueueManager(_mqHelper.QueueManager, properties); // why got NOT_AUTHORIZED error
                queueManager = new MQQueueManager(_mqHelper.QueueManager);
                // MessageBox.Show("Queue Manager created as:" + Environment.NewLine + "Host:" + _mqHelper.Host + Environment.NewLine + "Port:" + _mqHelper.Port + Environment.NewLine + "Channel:" + _mqHelper.Channel + Environment.NewLine + "Queue Manager:" + _mqHelper.QueueManager);
                // topic = queueManager.AccessTopic(_mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, IBM.WMQ.MQC.MQSO_CREATE | IBM.WMQ.MQC.MQSO_FAIL_IF_QUIESCING);
                if (rbDurable.Checked)
                {
                    string subName = txSubscriberName.Text;
                    subscriber = queueManager.AccessTopic(_mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQSO_DURABLE | IBM.WMQ.MQC.MQSO_CREATE | IBM.WMQ.MQC.MQSO_RESUME | IBM.WMQ.MQC.MQSO_FAIL_IF_QUIESCING, null, subName);  // IBM.WMQ.MQC.MQSO_CREATE create a new subscription, while IBM.WMQ.MQC.MQSO_RESUME when subscription was created under queue manager already
                }
                else
                {
                    subscriber = queueManager.AccessTopic(_mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, IBM.WMQ.MQC.MQSO_CREATE); // undurable
                }

                // topic = new MQTopic(queueManager, _mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQSO_CREATE | IBM.WMQ.MQC.MQSO_FAIL_IF_QUIESCING | IBM.WMQ.MQC.MQSO_DURABLE | IBM.WMQ.MQC.MQSO_RESUME, null, "SUB3"); // durable
                // subscriber = queueManager.AccessTopic(_mqHelper.ConsumerQueue, null, IBM.WMQ.MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, IBM.WMQ.MQC.MQOO_INPUT_SHARED); // undurable
                // IBM.WMQ.MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION caused 2510 TOPIC_ALTER
                // IBM.WMQ.MQC.MQSO_CREATE or MQSO_RESUME caused 2035 - NOT_AUTH
                // MessageBox.Show("Subscriber created" + subscriber.GetType().ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.Source + Environment.NewLine + ex.GetBaseException());
            }
        }
コード例 #6
0
        public override void InitialiseOutbound(string name, MessagePattern pattern, bool isTemporary)
        {
            Initialise(Direction.Outbound, name, pattern, isTemporary);
            var queueManagerName = InitialiseQueueManager();

            if (Pattern == MessagePattern.PublishSubscribe)
            {
                _topic = _queueManager.AccessTopic(Address, "",
                                                   MQC.MQTOPIC_OPEN_AS_PUBLICATION, MQC.MQOO_OUTPUT);
            }
            else if (Pattern == MessagePattern.RequestResponse && IsTemporary)
            {
                _queue = _queueManager.AccessQueue(Address, MQC.MQOO_OUTPUT,
                                                   queueManagerName, null, null);
            }
            else
            {
                _queue = _queueManager.AccessQueue(Address, MQC.MQOO_OUTPUT);
            }
        }
コード例 #7
0
        public void SubscriptionGet_OK()
        {
            var message = "PublishInSubscription";

            using (var broker = MQQueueManager.Connect(QueueManagerName, 0, Channel, ConnectionInfo))
            {
                var subs = new MQSubscription(broker);
                subs.Subscribe(
                    "MY.SUBS.T1",
                    MQC.MQSO_CREATE + MQC.MQSO_RESUME + MQC.MQSO_NON_DURABLE + MQC.MQSO_MANAGED,
                    SubscriptionTopicName);


                using (var topic = new MQTopic(broker, SubscriptionTopicName, string.Empty, MQC.MQTOPIC_OPEN_AS_PUBLICATION, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING))
                {
                    var outgoing = new MQMessage()
                    {
                        CharacterSet = MQC.CODESET_UTF,
                        Encoding     = MQC.MQENC_NORMAL
                    };
                    outgoing.WriteString(message);
                    topic.Publish(outgoing, new MQPutMessageOptions());
                }


                var incoming            = new MQMessage();
                MQGetMessageOptions gmo = new MQGetMessageOptions();
                gmo.WaitInterval = (int)TimeSpan.FromSeconds(30).TotalMilliseconds; //MQC.MQWI_UNLIMITED;
                gmo.Options     |= MQC.MQGMO_WAIT;
                gmo.Options     |= MQC.MQGMO_SYNCPOINT;

                subs.Get(incoming, gmo);
                Assert.AreEqual(message, incoming.ReadAll());

                subs.Close(MQC.MQCO_REMOVE_SUB, closeSubQueue: true, closeSubQueueOptions: MQC.MQCO_NONE);
            }
        }