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)); } }
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)); } }
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(); } }
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()); } }
/// <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()); } }
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); } }
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); } }