public void OpenSubscription_OK()
 {
     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,
             TopicName);
         Assert.AreEqual(true, subs.IsOpen);
         subs.Close(MQC.MQCO_REMOVE_SUB, closeSubQueue: false, closeSubQueueOptions: MQC.MQCO_NONE);
     }
 }
Example #2
0
        /// <summary>
        /// 订阅主题。订阅一次并获取消息
        /// </summary>
        /// <returns></returns>
        private string SubTopic(string business)
        {
            string         message = string.Empty;
            MQSubscription subs    = null;

            try
            {
                using (var mqmgr = MQQueueManager.Connect(IBMWMQConfig.QUEUE_MGR_NAME, MQC.MQCO_NONE, IBMWMQConfig.CHANNEL, IBMWMQConfig.CONNECTION_INFO))
                {
                    subs = new MQSubscription(mqmgr);
                    if (mqmgr.IsConnected)
                    {
                        int    option    = MQC.MQSO_CREATE + MQC.MQSO_RESUME + MQC.MQSO_NON_DURABLE + MQC.MQSO_MANAGED + MQC.MQSO_FAIL_IF_QUIESCING;
                        string subName   = string.Format(IBMWMQConfig.SUBSCRIPTION_TEMPLATE, business);
                        string topicName = string.Format(IBMWMQConfig.TOPIC_TEMPLATE, business);

                        subs.Subscribe(subName, option, topicName);

                        MQMessage           incoming = new MQMessage();
                        MQGetMessageOptions gmo      = new MQGetMessageOptions();
                        gmo.WaitInterval = 10 * 1000; //MQC.MQWI_UNLIMITED;
                        gmo.Options     |= MQC.MQGMO_WAIT;
                        gmo.Options     |= MQC.MQGMO_SYNCPOINT;

                        subs.Get(incoming, gmo);
                        message = incoming.ReadAll();

                        this.TryAdd(business, subs);
                    }
                }
            }
            catch (MQException e)
            {
                message = e.Reason.ToString();
            }
            finally
            {
                if (subs != null)
                {
                    subs.Close(MQC.MQCO_REMOVE_SUB, closeSubQueue: true, closeSubQueueOptions: MQC.MQCO_NONE);
                }
            }
            return(message);
        }
        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);
            }
        }