2012-07-11 75 views
3

我需要在C#中編寫基於Windows的服務來偵聽在WebSphere MQ中配置的請求隊列。我成功地將請求放入MQ中並獲取相關ID,但作爲響應,我沒有得到實際結果。C#中的WebSphere MQ偵聽器

我想開發一個系統,只要有新消息到達隊列中,服務就應該拿起消息並處理請求。我可以將該響應與我的關聯ID進行映射。

+0

您可以發佈一些不適合您的示例代碼嗎?你已經嘗試了什麼? – 2012-07-11 13:11:26

+0

邁克感謝,但我沒有得到任何錯誤的事情運行良好其實我打電話給異步調用MQ,但有一段時間我得到的響應和一些時間不是因爲需要時間處理,我正在尋找一個代碼我可以在隊列處理帶有關聯ID的請求時得到響應。請讓我知道你是否需要任何代碼。 – 2012-07-11 13:21:25

+0

這裏有什麼幫助嗎? 'C:\ Program Files文件(x86)\ IBM \ WebSphere MQ \ tools \ dotnet \ samples \ cs' – 2012-07-11 13:22:29

回答

4

以下代碼已解決我的問題。

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); 
    } 

} 
+0

官方示例可在此處找到: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

+0

我認爲它最近的帖子由IBM提供,但毫無疑問,非常有幫助的鏈接非常感謝 – 2015-09-04 12:34:18

1

我在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); 
    } 
+0

您可以使用「is」關鍵字來測試類的類型並進行相應的轉換。例如「if(msg is IBytesMessage)byMsg =(IBytesMessage)msg;」 – Shashi 2015-12-28 10:14:05