using System;
using System.Collections.Generic;
using System.Text;
using TIBCO.EMS;
namespace EII.JMS
{
public class MsgReceiver
{
private TopicSubscriber subscriber;
private TopicConnection connection;
public string ServerUrl { get; set; }
public string UserName { get; set; }
public string PassWord { get; set; }
public string TopicName { get; set; }
public string DurableName { get; set; }
public string ClientID { get; set; }
/// <summary>
/// JMS消息接收器
/// </summary>
/// <param name="serverUrl">服务器地址</param>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
/// <param name="topicName">Topic名称</param>
/// <param name="durableName">Durable名称</param>
/// <param name="clientID">客户端ID</param>
public MsgReceiver(string serverUrl, string userName, string passWord, string topicName, string durableName, string clientID)
{
this.ServerUrl = serverUrl;
this.UserName = userName;
this.PassWord = passWord;
this.TopicName = topicName;
this.DurableName = durableName;
this.ClientID = clientID;
}
/// <summary>
/// 连接服务器
/// </summary>
/// <returns></returns>
public bool ConnectServer()
{
try
{
TopicConnectionFactory factory = new TIBCO.EMS.TopicConnectionFactory(ServerUrl);
connection = factory.CreateTopicConnection(UserName, PassWord);
if (ClientID != null)
{
connection.ClientID = ClientID;
}
TopicSession session = connection.CreateTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.CreateTopic(TopicName);
subscriber = session.CreateDurableSubscriber(topic, DurableName);
connection.Start();
return true;
}
catch (EMSException e)
{
throw new Exception(e.ToString());
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <returns></returns>
public string Receive()
{
try
{
BytesMessage message = subscriber.Receive() as BytesMessage;
if (message != null)
{
byte[] file = new byte[message.BodyLength];
message.ReadBytes(file);
return System.Text.Encoding.UTF8.GetString(file);
}
else
{
return null;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 关闭连接
/// </summary>
public void CloseConn()
{
try
{
this.connection.Close();
}
catch (Exception ex)
{
throw ex;
}
}
}
}