我需要在C#中編寫基於Windows的服務來偵聽在WebSphere MQ中配置的請求隊列。我成功地將請求放入MQ中並獲取相關ID,但作爲響應,我沒有得到實際結果。C#中的WebSphere MQ偵聽器
我想開發一個系統,只要有新消息到達隊列中,服務就應該拿起消息並處理請求。我可以將該響應與我的關聯ID進行映射。
我需要在C#中編寫基於Windows的服務來偵聽在WebSphere MQ中配置的請求隊列。我成功地將請求放入MQ中並獲取相關ID,但作爲響應,我沒有得到實際結果。C#中的WebSphere MQ偵聽器
我想開發一個系統,只要有新消息到達隊列中,服務就應該拿起消息並處理請求。我可以將該響應與我的關聯ID進行映射。
以下代碼已解決我的問題。
class Program
{
static void Main(string[] args)
{
Program app = new Program();
app.Setup();
Console.ReadLine();
}
public void Setup()
{
XMSFactoryFactory xff = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
IConnectionFactory cf = xff.CreateConnectionFactory();
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, "10.87.188.156(7111)");
cf.SetIntProperty(XMSC.WMQ_PORT, 7111);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, "QMEIGS1.CRM.SVRCONN");
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, "QMEIGS1");
cf.SetIntProperty(XMSC.WMQ_BROKER_VERSION, XMSC.WMQ_BROKER_V1);
IConnection conn = cf.CreateConnection();
Console.WriteLine("connection created");
ISession sess = conn.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination dest = sess.CreateQueue("DOX.APYMT.ESB.SSK.RPO.02");
IMessageConsumer consumer = sess.CreateConsumer(dest);
MessageListener ml = new MessageListener(OnMessage);
consumer.MessageListener = ml;
conn.Start();
Console.WriteLine("Consumer started");
}
private void OnMessage(IMessage msg)
{
ITextMessage textMsg = (ITextMessage)msg;
Console.Write("Got a message: ");
Console.WriteLine(textMsg.Text);
}
}
官方示例可在此處找到:http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/xms_cuselisnr_net.htm – cryss 2014-12-18 12:30:55
我認爲它最近的帖子由IBM提供,但毫無疑問,非常有幫助的鏈接非常感謝 – 2015-09-04 12:34:18
我在Z/OS大型機上連接MQ。來自Rashmi的代碼示例爲我做了訣竅,但我需要更改「OnMessage」方法以提取消息:
private void OnMessage(IMessage msg)
{
IBytesMessage bytesMessage = (IBytesMessage)msg;
var buffer = new byte[bytesMessage.BodyLength];
bytesMessage.ReadBytes(buffer, (int)bytesMessage.BodyLength);
var messageAsText = Encoding.Unicode.GetString(buffer);
Console.Write("Got a message: ");
Console.WriteLine(messageAsText);
}
您可以使用「is」關鍵字來測試類的類型並進行相應的轉換。例如「if(msg is IBytesMessage)byMsg =(IBytesMessage)msg;」 – Shashi 2015-12-28 10:14:05
您可以發佈一些不適合您的示例代碼嗎?你已經嘗試了什麼? – 2012-07-11 13:11:26
邁克感謝,但我沒有得到任何錯誤的事情運行良好其實我打電話給異步調用MQ,但有一段時間我得到的響應和一些時間不是因爲需要時間處理,我正在尋找一個代碼我可以在隊列處理帶有關聯ID的請求時得到響應。請讓我知道你是否需要任何代碼。 – 2012-07-11 13:21:25
這裏有什麼幫助嗎? 'C:\ Program Files文件(x86)\ IBM \ WebSphere MQ \ tools \ dotnet \ samples \ cs' – 2012-07-11 13:22:29