背景:服務器
作XX項目須要把交易的消息推送給YY系統,技術選型MQapp
另:選用MQ緣由是爲了防止YY系統宕機,沒法接受收消息測試
實現this
一、安裝IBM WebSphere MQ客戶端編碼
二、引用amqmdnet.dll(在客戶端的安裝目錄下能夠找到)spa
三、C#代碼以下code
1 /* 2 * write by:wjf 3 * date:2015-05-20 4 * dec:MQ操做客戶端 5 * 6 */ 7 using System; 8 using System.Diagnostics; 9 using System.IO; 10 using IBM.WMQ; 11 12 namespace RsaTest 13 { 14 public class IbmMQClient : IDisposable 15 { 16 // 定義MQ 服務器的IP 地址; 17 private string hostname = "182.180.80.241"; 18 //private const string hostname = "182.180.80.243"; 19 //MQ偵聽端口號 20 //private const int port = 54221; 21 private readonly int port; 22 // 設置隊列打開選項爲可存放; 23 private const int openOptions = MQC.MQOO_OUTPUT; // MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 24 25 // 隊列管理器; 26 private readonly MQQueueManager qManager; 27 //隊列名稱 28 private readonly string qName; 29 // 定義MQ 服務器鏈接通道的名稱; 30 private readonly string channel; 31 // 定義隊列管理器的名稱; 32 //private string qManagerName; 33 34 public IbmMQClient(string qManagerName, string channel, string qName, string sPort, string hostname) 35 { 36 //this.qManagerName = qManagerName; 37 this.channel = channel; 38 this.qName = qName; 39 this.port = Convert.ToInt32(sPort); 40 this.hostname = hostname; 41 InitQueueEnv(); 42 qManager = new MQQueueManager(qManagerName); 43 } 44 45 /// <summary> 46 /// 初始化隊列環境 47 /// </summary> 48 private void InitQueueEnv() 49 { 50 // 初始化MQ 環境變量,以指定MQ 服務器的鏈接參數; 51 // 指定MQ 服務器的主機名稱; 52 MQEnvironment.Hostname = hostname; 53 // 指定MQ 服務器的服務器鏈接通道的名稱; 54 MQEnvironment.Channel = channel; 55 // 指定MQ 服務器的偵聽器的偵聽端口號; 56 MQEnvironment.Port = port; 57 //MQEnvironment.UserId = "mqm"; 58 } 59 60 public void SendMessage(string message) 61 { 62 if (qManager == null) 63 { 64 throw new Exception("隊列管理器未初始化。"); 65 } 66 // 得到隊列的訪問句柄; 67 MQQueue lq = qManager.AccessQueue(qName, openOptions); 68 69 try 70 { 71 // 構造新的消息對象,爲發送消息作準備; 72 MQMessage mo = new MQMessage(); 73 //指定編碼(有點小重要哦) 74 mo.CharacterSet = 1208; 75 // 填入消息內容; 76 //mo.WriteUTF(message); 77 mo.WriteString(message); 78 //指定消息的格式 79 mo.Format = MQC.MQFMT_STRING; 80 // 構造放入消息選項對象; 81 MQPutMessageOptions pmo = new MQPutMessageOptions(); 82 // 向已打開隊列放入已構造的測試消息; 83 lq.Put(mo, pmo); 84 } 85 finally 86 { 87 try 88 { 89 // 關閉本地隊列; 90 lq.Close(); 91 } 92 catch (Exception e) 93 { 94 Debug.WriteLine(e); 95 } 96 } 97 } 98 99 public void SendFile(string filePath) 100 { 101 if (qManager == null) 102 { 103 throw new Exception("隊列管理器未初始化。"); 104 } 105 // 得到隊列的訪問句柄; 106 MQQueue lq = qManager.AccessQueue(qName, openOptions); 107 108 try 109 { 110 // 構造新的消息對象,爲發送消息作準備; 111 MQMessage mo = new MQMessage(); 112 //構建文件信息對象 113 FileInfo fi = new FileInfo(filePath); 114 //寫入文件大小 115 mo.WriteInt8(fi.Length); 116 //寫入文件名 117 mo.WriteUTF(fi.Name); 118 //寫入文件內容 119 mo.Write(File.ReadAllBytes(filePath)); 120 // 構造放入消息選項對象; 121 MQPutMessageOptions pmo = new MQPutMessageOptions(); 122 // 向已打開隊列放入已構造的測試消息; 123 lq.Put(mo, pmo); 124 } 125 finally 126 { 127 try 128 { 129 // 關閉本地隊列; 130 lq.Close(); 131 } 132 catch (Exception e) 133 { 134 Debug.WriteLine(e); 135 } 136 } 137 } 138 139 ~IbmMQClient() 140 { 141 Close(); 142 } 143 144 /// <summary> 145 /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. 146 /// </summary> 147 /// <filterpriority>2</filterpriority> 148 public void Dispose() 149 { 150 Close(); 151 } 152 153 public void Close() 154 { 155 if (qManager != null) 156 { 157 try 158 { 159 // 釋放與隊列管理器的鏈接; 160 qManager.Disconnect(); 161 } 162 catch (Exception e) 163 { 164 Debug.WriteLine(e); 165 } 166 } 167 } 168 } 169 }