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; }
// 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()); }
//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()); } } }
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)); }
/// <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); }
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)); }
public bool TryAddSubscriber(string topicId, TopicSubscriber item) { TopicPublisher topic; if (TryGetPublisher(topicId, out topic)) { topic.Subscribers[item.Subscriber] = item; return(true); } return(false); }
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()); }; }
/// <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; } }
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); } }
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); }
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); } }
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); }
/// <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()); } }
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; }
//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; }
/// <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 }
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); } }
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); } }
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)); } }
/// <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); }
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); } }
public TIBCO.EMS.TopicSubscriber CreateDurableSubscriber(TIBCO.EMS.Topic param_topic, System.String param_name) { var result = new TopicSubscriber {Topic = param_topic}; return result; }
static void Main(string[] args) { TopicSubscriber.Run(args); }
public void AddSubscriber(TopicSubscriber ts) { Publisher.AddSubscriber(ts); }
public EmsTopicSubscriber(TopicSubscriber topicSubscriber) : base(topicSubscriber) { }