コード例 #1
0
        public SubscriberClient(string server, string exchange, string queueName, IConnectionPool connPool, ISerializerNegotiator serializerNegotiator)
        {
            ILoggerProvider loggerProvider = new ConsoleLoggerProvider(new ConsoleLoggerSettings());

            subscriber = new TopicSubscriber <string>(server, exchange, connPool, serializerNegotiator, loggerProvider);
            subscriber.OnMessageReceived += Subscriber_OnMessageReceived;
        }
コード例 #2
0
        // GET: Publish
        public ActionResult Subscribes()
        {
            var cfp = new ContextFactoryProperties()
            {
                SolClientLogLevel = SolLogLevel.Warning
            };

            cfp.LogToConsoleError();

            ContextFactory.Instance.Init(cfp);

            try
            {
                // Context must be created first
                using (IContext context = ContextFactory.Instance.CreateContext(new ContextProperties(), null))
                {
                    // Create the application
                    TopicSubscriber topicSubscriber = new TopicSubscriber(_vpnName, _userName, _password);

                    // Run the application within the context and against the host
                    topicSubscriber.Run(context, _host);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception thrown: {0}", ex.Message);
            }
            finally
            {
                // Dispose Solace Systems Messaging API
                ContextFactory.Instance.Cleanup();
            }

            return(View());
        }
コード例 #3
0
        //void m_TransDispatcher_SyncCompleted(object sender, SyncItemEventArgs<TransactionItem> e)
        //{
        //    //TODO:

        //    //e.Item.SyncExpired();
        //}


        public void LoadTopicConfig()
        {
            var config = QueueServerConfig.GetConfig();

            var items = config.RemoteQueueSettings;

            foreach (QueueServerConfigItem item in items)
            {
                //var prop = new QProperties(item.QueueName, item.IsTrans, (CoverMode)item.CoverMode);
                if (item.IsTopic)
                {
                    var publisher = new TopicPublisher()
                    {
                        TopicId   = item.QueueName,
                        TopicName = item.QueueName
                    };

                    string[] strsubs = item.TargetPath.SplitTrim('|');
                    foreach (var s in strsubs)
                    {
                        publisher.AddSubscriber(TopicSubscriber.Create(s, item.QueueName));
                    }

                    var mq = AddQueue(item);
                    QLogger.InfoFormat("Queue Topic Added: {0}", item.Print());
                }
            }
        }
コード例 #4
0
        public void Subscribe(string topic, EventHandler <TopicArgs> handler)
        {
            TopicSubscriber topicSubscriber = new TopicSubscriber(topic, factory);

            topicSubscriber.Start();

            topicSubscriber.TopicMessageEvent += msgParser => handler(msgParser.EndPoint, new TopicArgs(msgParser));
        }
コード例 #5
0
ファイル: Batch.cs プロジェクト: knarf7112/ActiveMQLab
        /// <summary>
        /// Register and Start TopicSubscriber
        /// </summary>
        /// <param name="brokerURL">ActiveMQ URL</param>
        /// <param name="destination">ActiveMQ Column Name</param>
        /// <param name="dele">delegate object</param>
        /// <returns>TopicSubscriber(Registered and Started )</returns>
        private TopicSubscriber RegisterTopicSubscriber(string brokerURL, string destination, MessageReceivedDelegate <string> dele)
        {
            TopicSubscriber subscriber = new TopicSubscriber(brokerURL, destination);

            subscriber.Start();
            subscriber.OnMessageReceived += dele;
            return(subscriber);
        }
コード例 #6
0
        public IQueueAck AddItem(QueueItem item, TopicSubscriber subscriber)
        {
            var copy = item.Copy();

            copy.Host = subscriber.QHost.RawHostAddress;
            //copy.Args = new NameValueArgs();
            //copy.Args["HostAddress"] = subscriber.Host;
            EventQueue.Enqueue(copy);
            return(new QueueAck(MessageState.Arrived, item));
        }
コード例 #7
0
ファイル: Topics.cs プロジェクト: nistec/MQueue
        public bool TryAddSubscriber(string topicId, TopicSubscriber item)
        {
            TopicPublisher topic;

            if (TryGetPublisher(topicId, out topic))
            {
                topic.Subscribers[item.Subscriber] = item;
                return(true);
            }
            return(false);
        }
コード例 #8
0
        public void Subscribe <T>(string topic, Action <T> handler)
        {
            TopicSubscriber topicSubscriber = new TopicSubscriber(topic, factory);

            topicSubscriber.Start();

            topicSubscriber.TopicMessageEvent += delegate(IMessageParser msgParser)
            {
                // msgsReceived.Add(msgParser.ParseObject());
            };
        }
コード例 #9
0
ファイル: Batch.cs プロジェクト: knarf7112/ActiveMQLab
 /// <summary>
 /// 檢查註冊TopicSubscriber的OnMessageReceived事件被註冊的數量
 /// </summary>
 /// <param name="topicSubscriber">實作的TopicSubscriber物件</param>
 /// <returns>被註冊的數量</returns>
 private int CheckMessageReceivedDelegateCount(TopicSubscriber topicSubscriber)
 {
     try
     {
         MessageReceivedDelegate <string> dele = this.GetObjectDele <TopicSubscriber, MessageReceivedDelegate <string> >(topicSubscriber, "OnMessageReceived");
         return(dele.GetInvocationList().Length);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
コード例 #10
0
    private void DurableExample(string[] args)
    {
        try
        {
            ConnectionFactory factory    = new TIBCO.EMS.ConnectionFactory(serverUrl);
            Connection        connection = factory.CreateConnection(userName, password);

            // if clientID is specified we must set it right here
            if (clientID != null)
            {
                connection.ClientID = clientID;
            }

            Session session = connection.CreateSession(false, Session.AUTO_ACKNOWLEDGE);

            bool unsubscribe = false;
            if (unsubscribe)
            {
                Console.WriteLine("Unsubscribing durable subscriber " + durableName);
                session.Unsubscribe(durableName);
                Console.WriteLine("Successfully unsubscribed " + durableName);
                connection.Close();
                return;
            }

            Console.WriteLine("Subscribing to topic: " + topicName);

            // Use createTopic() to enable subscriptions to dynamic topics.
            Topic           topic      = session.CreateTopic(topicName);
            TopicSubscriber subscriber = session.CreateDurableSubscriber(topic, durableName);

            connection.Start();

            // read topic messages
            while (true)
            {
                Message message = subscriber.Receive();
                if (message == null)
                {
                    break;
                }
                Console.WriteLine("\nReceived message: " + message);
            }
            connection.Close();
        }
        catch (EMSException e)
        {
            Console.Error.WriteLine("Exception in 1_ReceiveDurable: " + e.Message);
            Console.Error.WriteLine(e.StackTrace);
            Environment.Exit(0);
        }
    }
コード例 #11
0
        public IDisposable Subscribe(string topicPattern, Action <string, object> messageConsumer)
        {
            var topicSubscriber = new TopicSubscriber(topicPattern, MessageParserFactory);

            topicSubscriber.TopicMessageEvent += messageParser =>
            {
                object o = messageParser.ParseObject();
                messageConsumer(messageParser.Topic, o);
            };
            topicSubscriber.Start();

            return(topicSubscriber);
        }
コード例 #12
0
 public void SendSubscriber(TopicSubscriber subscriber, QueueItem item)
 {
     try
     {
         var api = QueueApi.Get(subscriber.Protocol);
         //var message = item.ToMessage();// Message.Create(item.GetItemStream());
         api.Send(item);
     }
     catch (Exception ex)
     {
         Netlog.Exception("Topic Sender Subscriber error ", ex);
     }
 }
コード例 #13
0
ファイル: Topics.cs プロジェクト: nistec/MQueue
        public bool TryGetSubscriber(string topicId, string subscriber, out TopicSubscriber item)
        {
            TopicPublisher topic;

            if (TryGetPublisher(topicId, out topic))
            {
                if (topic.Subscribers.TryGetValue(subscriber, out item))
                {
                    return(true);
                }
            }
            item = null;
            return(false);
        }
コード例 #14
0
ファイル: Batch.cs プロジェクト: knarf7112/ActiveMQLab
        /// <summary>
        /// 初始化所有銀行狀態列表並增加一個字典用來訂閱發佈到ActiveMQ的銀行狀態改變(key: 0000(銀行代碼) + 0800(格式) , value:銀行狀態字串)
        /// </summary>
        public void InitRegisterSignON_OFF()
        {
            try
            {
                #region 1.檢查銀行狀態列表
                //init Bank Dictionary
                if (!this.InitDicBanks())
                {
                    throw new Exception("初始化銀行狀態列表失敗");
                }
                #endregion

                #region 2.檢查並註冊ActiveMQ上的某個服務通道並記錄到集合內
                log.Debug("開始檢查銀行狀態訂閱者集合的註冊狀況");
                //取得MQ的URL
                string brokerURL = System.Configuration.ConfigurationManager.AppSettings["BrokerURL"];
                foreach (string item in this.DicBanks.Keys)
                {
                    string destination = item + "0800";// 0000(銀行代碼) + 0800(SignOn/Off)
                    if (!this.DicTopicSubscriber.ContainsKey(destination))
                    {
                        //subscriber設定URL,destination和委派的方法
                        TopicSubscriber subscriber = RegisterTopicSubscriber(brokerURL, destination, SignOn_Off_Event);

                        //加入訂閱者集合內
                        this.DicTopicSubscriber.Add(destination, subscriber);
                    }
                    else
                    {
                        //此destination存在於DicTopicSubscriber集合內
                        //檢查此物件的註冊數量
                        TopicSubscriber ts         = this.DicTopicSubscriber[destination];       //取得物件
                        int             eventCount = this.CheckMessageReceivedDelegateCount(ts); //取得OnMessageReceived的註冊數量
                        //沒有註冊過事件
                        if (eventCount == 0)
                        {
                            ts.OnMessageReceived += SignOn_Off_Event;
                        }
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                log.Error(">> [AbsClientRequestHandler][InitRegisterSignON_OFF] Error:" + ex.ToString());
                throw new Exception("[AbsClientRequestHandler][InitRegisterSignON_OFF] Error:" + ex.ToString());
            }
        }
コード例 #15
0
        public void AddTopic(string QueueName, string TargetPath)
        {
            Publisher = new TopicPublisher()
            {
                TopicId   = QueueName,
                TopicName = QueueName
            };

            string[] strsubs = TargetPath.SplitTrim('|');
            foreach (var s in strsubs)
            {
                AddSubscriber(TopicSubscriber.Create(s, QueueName));
            }
            Logger.Info("Queue Topic Added: {0}", QueueName);
            Initialized = true;
        }
コード例 #16
0
        //public void LoadTopicConfig()
        //{

        //    var config = QueueServerConfig.GetConfig();

        //    var items = config.RemoteQueueSettings;

        //    foreach (QueueServerConfigItem item in items)
        //    {
        //        //var prop = new QProperties(item.QueueName, item.IsTrans, (CoverMode)item.CoverMode);
        //        if (item.IsTopic)
        //        {
        //            var publisher = new TopicPublisher()
        //            {
        //                TopicId = item.QueueName,
        //                TopicName = item.QueueName
        //            };

        //            string[] strsubs = item.TargetPath.SplitTrim('|');
        //            foreach (var s in strsubs)
        //            {
        //                publisher.AddSubscriber(TopicSubscriber.Create(s, item.QueueName));
        //            }

        //            var mq = AddQueue(item);
        //            QLogger.InfoFormat("Queue Topic Added: {0}", item.Print());
        //        }
        //    }
        //}

        public void AddTopic(QueueServerConfigItem item)
        {
            Publisher = new TopicPublisher()
            {
                TopicId   = item.QueueName,
                TopicName = item.QueueName
            };

            string[] strsubs = item.TargetPath.SplitTrim('|');
            foreach (var s in strsubs)
            {
                AddSubscriber(TopicSubscriber.Create(s, item.QueueName));
            }

            //var mq = AddQueue(item);
            Logger.Info("Queue Topic Added: {0}", item.Print());
            Initialized = true;
        }
コード例 #17
0
 /// <summary>
 /// Collection of MQTT Connection setup
 /// </summary>
 private void MQTTConnections()
 {
     try
     {
         DiagnosticItems.Enqueue(new DiagnosticItem("Connecting MainSubscriber", 2));
         MainInputSubsriber = new TopicSubscriber(SubTopicName, Broker, ClientID, ConsumerID);                      //connect the main Subscriber
         MainInputSubsriber.OnMessageReceived += new MessageReceivedDelegate(MainInputSubsriber_OnmessageReceived); //add the deligate for when a message is received
         ThingsToDispose.Add(new Disposable(nameof(MainInputSubsriber), MainInputSubsriber));                       //add to reference pile so it disposes of itself properly.
     }
     catch (Exception ex) { DiagnosticItems.Enqueue(new DiagnosticItem(ex.ToString(), 1)); }                        //logit
     try
     {
         DiagnosticItems.Enqueue(new DiagnosticItem("Connecting EMP Publisher", 2));                                                //connect the EMp Publisher
         PacketCollection.EMPPackets.Publisher = new TopicPublisher(EMPPackets.TopicName, Broker);
         ThingsToDispose.Add(new Disposable(nameof(PacketCollection.EMPPackets.Publisher), PacketCollection.EMPPackets.Publisher)); //add it to things to dispose
     }
     catch (Exception ex) { DiagnosticItems.Enqueue(new DiagnosticItem(ex.ToString(), 1)); }                                        //logit
 }
コード例 #18
0
        public void SetUp()
        {
            this.subscribers = new List <IMessageReceiver>();
            //
            for (int i = 0; i < 4; i++)
            {
                TopicSubscriber subscriber = new TopicSubscriber(BROKER, TOPIC_NAME);

                // Add event
                subscriber.OnMessageReceived +=
                    (
                        message => log.Info(subscriber.ConsumerId + ": " + message)
                    );
                subscriber.ConsumerId = CONSUMER_ID + "#" + (i + 1);
                subscriber.Start();
                // Add to Subscribers
                subscribers.Add(subscriber);
            }
        }
コード例 #19
0
 public void SetUp()
 {
     this.ctx         = ContextRegistry.GetContext();
     this.publisher   = ctx["topicPublisher"] as IMessageSender;
     this.subscribers = new List <IMessageReceiver>();
     //
     for (int i = 0; i < 4; i++)
     {
         TopicSubscriber subscriber = ctx["topicSubscriber"] as TopicSubscriber;
         subscriber.ConsumerId = subscriber.ConsumerId + (i + 1);
         // Add event
         subscriber.OnMessageReceived +=
             (
                 message => log.Info(subscriber.ConsumerId + ": " + message)
             );
         subscriber.Start();
         log.Debug("Start topic subscriber with Consumer ID: [" + subscriber.ConsumerId + "]");
         subscribers.Add(subscriber);
     }
 }
コード例 #20
0
        public IQueueAck SendSubscriber(TopicSubscriber subscriber, QueueItem copy)
        {
            try
            {
                copy.Host = subscriber.HostName;
                var api = new QueueApi(subscriber.QHost);
                var ack = api.PublishItem(copy);
                if (!ack.MessageState.IsStateOk())
                {
                    Controller.JournalAddItem(copy);
                }

                return(ack);
            }
            catch (Exception ex)
            {
                Logger.Exception("Topic Sender Subscriber error ", ex);
                Controller.JournalAddItem(copy);
                return(new QueueAck(MessageState.FailedEnqueue, copy));
            }
        }
コード例 #21
0
ファイル: Program.cs プロジェクト: zyonet/tibcoems-tutorials
    /// <summary>
    /// CreateClientTopicSubscriber
    /// </summary>
    /// <param name="messageSelector"></param>
    private void CreateClientTopicSubscriber(string messageSelector)
    {
        var topicname = "GeneralTopic";

        Console.WriteLine("Createing a topic we can publish to: " + topicname);

        TopicConnectionFactory factory = new TopicConnectionFactory("localhost");

        subscriberConnection = factory.CreateTopicConnection("", "");  // Username, password
        subscriberConnection.Start();

        subscriberSession = subscriberConnection.CreateTopicSession(false, Session.AUTO_ACKNOWLEDGE);
        Topic clientTopic = subscriberSession.CreateTopic(topicname);

        // using message selector to demostrate we can subscribe to a sepecific topic by using the
        // textMessage.SetStringProperty("Owner", "HelloWorld");
        // If the messageSelector does not match not message will be received:  "Owner LIKE '%HelloWorld%'"
        TopicSubscriber clientTopicSubscriber = subscriberSession.CreateSubscriber(clientTopic, messageSelector, true);

        //Wireup an event handler for async message consumption
        clientTopicSubscriber.MessageHandler += new EMSMessageHandler(event_MessageHandler);
    }
コード例 #22
0
    public csDurable(String[] args)
    {
        ParseArgs(args);

        try {
            tibemsUtilities.initSSLParams(serverUrl, args);
        }
        catch (Exception e)
        {
            System.Console.WriteLine("Exception: " + e.Message);
            System.Console.WriteLine(e.StackTrace);
            System.Environment.Exit(-1);
        }

        if (!unsubscribe && (topicName == null))
        {
            Console.Error.WriteLine("Error: must specify topic name");
            Usage();
        }

        if (durableName == null)
        {
            Console.Error.WriteLine("Error: must specify durable subscriber name");
            Usage();
        }

        Console.WriteLine("\n------------------------------------------------------------------------");
        Console.WriteLine("csDurable SAMPLE");
        Console.WriteLine("------------------------------------------------------------------------");
        Console.WriteLine("Server....................... " + ((serverUrl != null)?serverUrl:"localhost"));
        Console.WriteLine("User......................... " + ((userName != null)?userName:"******"));
        Console.WriteLine("Topic........................ " + topicName);
        Console.WriteLine("Durable...................... " + durableName);
        Console.WriteLine("Client ID.................... " + ((clientID != null)?clientID:"(null)"));
        Console.WriteLine("------------------------------------------------------------------------\n");

        try {
            ConnectionFactory factory = new TIBCO.EMS.ConnectionFactory(serverUrl);

            Connection connection = factory.CreateConnection(userName, password);

            // if clientID is specified we must set it right here
            if (clientID != null)
            {
                connection.ClientID = clientID;
            }

            Session session = connection.CreateSession(false, Session.AUTO_ACKNOWLEDGE);

            if (unsubscribe)
            {
                Console.WriteLine("Unsubscribing durable subscriber " + durableName);
                session.Unsubscribe(durableName);
                Console.WriteLine("Successfully unsubscribed " + durableName);
                connection.Close();
                return;
            }

            Console.WriteLine("Subscribing to topic: " + topicName);

            // Use createTopic() to enable subscriptions to dynamic topics.
            Topic topic = session.CreateTopic(topicName);

            TopicSubscriber subscriber = session.CreateDurableSubscriber(topic, durableName);

            connection.Start();

            // read topic messages
            while (true)
            {
                Message message = subscriber.Receive();
                if (message == null)
                {
                    break;
                }

                Console.WriteLine("\nReceived message: " + message);
            }

            connection.Close();
        } catch (EMSException e) {
            Console.Error.WriteLine("Exception in csDurable: " + e.Message);
            Console.Error.WriteLine(e.StackTrace);
            Environment.Exit(0);
        }
    }
コード例 #23
0
		public TIBCO.EMS.TopicSubscriber CreateDurableSubscriber(TIBCO.EMS.Topic param_topic, System.String param_name)
		{
			var result = new TopicSubscriber {Topic = param_topic};
			return result;
		}
コード例 #24
0
 static void Main(string[] args)
 {
     TopicSubscriber.Run(args);
 }
コード例 #25
0
 public void AddSubscriber(TopicSubscriber ts)
 {
     Publisher.AddSubscriber(ts);
 }
コード例 #26
0
 public EmsTopicSubscriber(TopicSubscriber topicSubscriber)
     : base(topicSubscriber)
 {
 }