從 C# 客戶端連接 Tibco EMS
下面例子簡要介紹 C# 客戶端怎樣使用 TIBCO.EMS.dll 來連接 EMS 服務器.
using System; using System.Diagnostics; using System.Threading; using TIBCO.EMS; namespace TestEMS { class Program { static void Main(string[] args) { Console.WriteLine("Test started"); new Program().Run(); Console.ReadLine(); } private void Run() { StartEMSServer(); CreateEMSServerTopicPublisher(); CreateClientTopicSubscriber("Owner LIKE '%Rich Newman%'"); // Pass "" for no message selector EMSServerPublishThisMessage("Hello World", "Owner", "Rich Newman"); } #region EMS Server private const string tibcoEMSPath = @"C:\tibco\ems\5.0\bin\"; private readonly string tibcoEMSExecutable = tibcoEMSPath + "tibemsd.exe"; private Process tibcoEMSProcess; public void StartEMSServer() { tibcoEMSProcess = new Process(); ProcessStartInfo processStartInfo = new ProcessStartInfo(tibcoEMSExecutable); tibcoEMSProcess.StartInfo = processStartInfo; processStartInfo.WorkingDirectory = tibcoEMSPath; bool started = tibcoEMSProcess.Start(); Thread.Sleep(500); } TopicConnection publisherConnection; TopicSession publisherSession; TopicPublisher emsServerPublisher; private void CreateEMSServerTopicPublisher() { TopicConnectionFactory factory = new TIBCO.EMS.TopicConnectionFactory("localhost"); publisherConnection = factory.CreateTopicConnection("", ""); // Username, password publisherSession = publisherConnection.CreateTopicSession(false, Session.AUTO_ACKNOWLEDGE); Topic generalTopic = publisherSession.CreateTopic("GeneralTopic"); emsServerPublisher = publisherSession.CreatePublisher(generalTopic); publisherConnection.Start(); } internal void EMSServerPublishThisMessage(string message, string propertyName, string propertyValue) { TextMessage textMessage = publisherSession.CreateTextMessage(); textMessage.Text = message; textMessage.SetStringProperty(propertyName, propertyValue); emsServerPublisher.Publish(textMessage); Console.WriteLine("EMS Publisher published message: " + message); } #endregion #region EMS Client TopicConnection subscriberConnection; TopicSession subscriberSession; private void CreateClientTopicSubscriber(string messageSelector) { TopicConnectionFactory factory = new TIBCO.EMS.TopicConnectionFactory("localhost"); subscriberConnection = factory.CreateTopicConnection("", ""); // Username, password subscriberConnection.Start(); subscriberSession = subscriberConnection.CreateTopicSession(false, Session.AUTO_ACKNOWLEDGE); Topic clientTopic = subscriberSession.CreateTopic("GeneralTopic"); TopicSubscriber clientTopicSubscriber = subscriberSession.CreateSubscriber(clientTopic, messageSelector, true); clientTopicSubscriber.MessageHandler += new EMSMessageHandler(test_MessageHandler); } void test_MessageHandler(object sender, EMSMessageEventArgs args) { Console.WriteLine("EMS Client received message: " + args.Message.ToString()); } #endregion } }