『壹』 怎樣才能用代碼創建一個消息隊列
你在創建抄公有隊列,而你的機器不屬於任何域。一般工作組安裝的計算機只能創建私有隊列。
System.Messaging.MessageQueue QueueReceive = new System.Messaging.MessageQueue(@".\Private$\MSMQDemo");
這樣應該不會出錯。
『貳』 c#中怎樣創建消息隊列
1..Net使用消息隊列,藉助windows組件來存儲要完成的一系列任務,不用程序使用同一個隊列,方便不同程序之間的數據共享和協作……
2.這個在某個方面類似於session(當然還有很多方面不同),相同之處:session可以把信息存儲在aspnet_state服務中,網站重新編譯或者重新啟動網站,session不會丟失(session超時是正常情況,這種情況除外)。
3.win7中安裝消息隊列組件,詳情請網路搜索相關資料。
4.先創建隊列,再使用隊列,隊列中的消息,發送一個多一個,接收一個少一個,先進先出。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Messaging;
//添加物理文件System.Messaging的引用
namespacetestweb
{
publicpartialclassMSMQtest:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
//CreateNewQueue("MsgQueue");//創建一個消息隊列
//sendSimpleMsg();//每一個隊列最好只發送和接收同一種格式的信息,不然不好轉換格式。
//receiveSimpleMsg();//
//receiveSimpleMsg();
//sendComplexMsg();
//receiveComplexMsg();
MsgModelm=receiveComplexMsg<MsgModel>();
Response.Write(m.ToString());
}
privatevoidsendSimpleMsg()
{
//實例化MessageQueue,並指向現有的一個名稱為VideoQueue隊列
MessageQueueMQ=newMessageQueue(@".private$MsgQueue");
//MQ.Send("消息測試","測試消息");
System.Messaging.Messagemessage=newSystem.Messaging.Message();
message.Label="消息lable";
message.Body="消息body";
MQ.Send(message);
Response.Write("成功發送消息,"+DateTime.Now+"<br/>");
}
privatevoidreceiveSimpleMsg()
{
MessageQueueMQ=newMessageQueue(@".private$MsgQueue");
//調用MessageQueue的Receive方法接收消息
if(MQ.GetAllMessages().Length>0)
{
System.Messaging.Messagemessage=MQ.Receive(TimeSpan.FromSeconds(5));
if(message!=null)
{
//message.Formatter=newSystem.Messaging.XmlMessageFormatter(newstring[]{"Message.Bussiness.VideoPath,Message"});//消息類型轉換
message.Formatter=newSystem.Messaging.XmlMessageFormatter(newType[]{typeof(string)});
Response.Write(string.Format("接收消息成功,lable:{0},body:{1},{2}<br/>",message.Label,message.Body.ToString(),DateTime.Now));
}
}
else
{
Response.Write("沒有消息了!<br/>");
}
}
privatevoidsendComplexMsg()
{
//實例化MessageQueue,並指向現有的一個名稱為VideoQueue隊列
MessageQueueMQ=newMessageQueue(@".private$MsgQueue");
//MQ.Send("消息測試","測試消息");
System.Messaging.Messagemessage=newSystem.Messaging.Message();
message.Label="復雜消息lable";
message.Body=newMsgModel("1","消息1");
MQ.Send(message);
Response.Write("成功發送消息,"+DateTime.Now+"<br/>");
}
privatevoidreceiveComplexMsg()
{
MessageQueueMQ=newMessageQueue(@".private$MsgQueue");
//調用MessageQueue的Receive方法接收消息
if(MQ.GetAllMessages().Length>0)
{
System.Messaging.Messagemessage=MQ.Receive(TimeSpan.FromSeconds(5));
if(message!=null)
{
message.Formatter=newSystem.Messaging.XmlMessageFormatter(newType[]{typeof(MsgModel)});//消息類型轉換
MsgModelmsg=(MsgModel)message.Body;
Response.Write(string.Format("接收消息成功,lable:{0},body:{1},{2}<br/>",message.Label,msg,DateTime.Now));
}
}
else
{
Response.Write("沒有消息了!<br/>");
}
}
privateTreceiveComplexMsg<T>()
{
MessageQueueMQ=newMessageQueue(@".private$MsgQueue");
//調用MessageQueue的Receive方法接收消息
if(MQ.GetAllMessages().Length>0)
{
System.Messaging.Messagemessage=MQ.Receive(TimeSpan.FromSeconds(5));
if(message!=null)
{
message.Formatter=newSystem.Messaging.XmlMessageFormatter(newType[]{typeof(T)});//消息類型轉換
Tmsg=(T)message.Body;
returnmsg;
}
}
returndefault(T);
}
///<summary>
///創建消息隊列
///</summary>
///<paramname="name">消息隊列名稱</param>
///<returns></returns>
publicvoidCreateNewQueue(stringname)
{
if(!System.Messaging.MessageQueue.Exists(".\private$\"+name))//檢查是否已經存在同名的消息隊列
{
System.Messaging.MessageQueuemq=System.Messaging.MessageQueue.Create(".\private$\"+name);
mq.Label="private$\"+name;
Response.Write("創建成功!<br/>");
}
else
{
//System.Messaging.MessageQueue.Delete(".\private$\"+name);//刪除一個消息隊列
Response.Write("已經存在<br/>");
}
}
}
[Serializable]
publicclassMsgModel
{
publicstringid{get;set;}
publicstringName{get;set;}
publicMsgModel(){}
publicMsgModel(string_id,string_Name)
{
id=_id;
Name=_Name;
}
publicoverridestringToString()
{
if(string.IsNullOrEmpty(id)||string.IsNullOrEmpty(Name))return"";
returnstring.Format("id--{0},Name--{1}",id,Name);
}
}
}
『叄』 1.創建一個空隊列 2.判斷創建的隊列是否為空 3.提示用戶輸入隊列的長度 4.根據用戶
你太可愛了,,真的很簡單,但懸賞的財富值太少,懶得做
『肆』 mq不能創建隊列是什麼原因
在第一台計算機上創建的消息被傳遞到第二台計算機上的隊列 Q1(此隊列專被稱為遠程隊列)。 要點: 在本屬教程中,您將使用創建了隊列管理器 QM_APPLE 和本地隊列 Q1 的機器作為接收機器。 您將在發送機器上設置隊列管理器和隊列
『伍』 問: 60 1.創建一個空隊列 2.判斷創建的隊列是否為空 3.提示用戶輸入隊列的長度 4
(1)如果你是為了熟悉隊列(雙端隊列)這種基礎數據結構,我建議你自己實現這個數據結構,例如用數組模擬,或者用雙向鏈表寫。
(2)直接用C++中的deque實現。
『陸』 怎樣用命令行的方式創建死信隊列
|一、WebSphere MQ命令行命令
1、停止隊列管理器
endmqm [-z] [([-c | -w | -i | -p] [-r] [-s]) | -x] QMgrName
endmqm mqm_name 使用默認選項停止隊列管理器需要等待當前的應用連接完成並斷開。
-i 立即停止隊列管理器。
-w 需要等待所有的應用停止以後才會真正關閉隊列管理器
-p 使用以上參數都無法正常停止隊列管理器的情況下可以使用該參數
2、啟動隊列管理器
strmqm [-z] [-a | -c | -r | -x] [-d none|minimal|all] [-f] [-ns] QMgrName
隊列管理器必須在完全停止時才能被啟動。
3、創建隊列管理器
crtmqm [-z] [-q] [-c Text] [-d DefXmitQ] [-h MaxHandles]
[-md DataPath] [-g ApplicationGroup]
[-t TrigInt] [-u DeadQ] [-x MaxUMsgs] [-lp LogPri] [-ls LogSec]
[-lc | -ll] [-lf LogFileSize] [-ld LogPath] QMgrName
隊列管理器名大小寫敏感且不支持空字元串,長度為48位元組,同一網路中不能有重名。
創建隊列管理器的時侯最好創建死信隊列用於存放無法發送的信息,保證通道不會因為無法發送信息而被關閉。
crtmqm -u deadq_name mqm_name
4、刪除隊列管理器
dltmqm [-z] QMgrName
刪除隊列管理器會完全刪除其所擁有的對象和相關信息,並且是不可恢復的。要刪除一個隊列管理器首先要保證他是停止的。
二、WebSphere MQ Script. (MQSC) commands
WebSphere MQ Script. (MQSC) commands是常常用來管理隊列管理器對象的。這些對象包括隊列管理器本身,隊列,名稱列表,通道,客戶端通道,監聽,服務等。使用runmqsc 隊列管理名來啟動,可以運行單個的命令,也可以通過命令集的腳本來運行。
本地隊列管理器的作用是接收遠程或本地的信息流,並將本地隊列中的信息流取出以供應用程序使用。在做這些工作之前需要定義相關的隊列管理器,隊列和通道等,而這些工作是由WebSphere MQ Script. (MQSC) commands來完整的。在Windows及Linux環境下也可以通過WebSphere MQ Explorer來完成。
啟動WebSphere MQ Script. (MQSC) :runmqsc [-e] [-v] [-w WaitTime [-x] [-m LocalQMgrName]] [QMgrName]
runmqsc mqm_name。通過命令runmqsc啟動隊列管理器的命令伺服器。WebSphere MQ Explorer也能完成相同的任務。runmqsc的相關命令有三種運行方式,Verify a command without running it,Run a command on a local queue manager,Run a command on a remote queue manager。runmqsc的相關命令在解釋的時候都會以大寫來解釋,比如DEFINE,ALTER,RESET等。但是這些命令並不是大小寫敏感的。每行runmqsc命令最長只能到8個字元,可以通過-或者+連接下一行,-是從下一行的第一個字元開始,+是從下一行的第一個非空字元開始。而且所有命令與平台無關。runmqsc的標准輸入是鍵盤,標准輸出時屏幕,我們可以通過<,>重定向。例如從腳本輸入命令runmqsc </path/filename.in,將結果重定向到文件runmqsc>/path/filename.out。
1、顯示隊列管理器屬性(DISPLAY QMGR):
DISPLAY QMGR顯示當前隊列管理器的所有屬性,也可以使用DISPLAY QMGR 屬性名,單獨查看當前隊列管理器的某個特定屬性。
2、 更改隊列管理器屬性(ALTER QMGR ):
ALTER QMGR 用於更改隊列管理器的相關屬性,例如 ALTER QMGR MAXHANDS(255),這個命令將默認隊列管理器的MAXHANDS由256更改為255。
3、創建本地隊列(DEFINE QLOCAL ):
DEFINE QLOCAL Q_LOCAL_NAME,在創建隊列的時候可以定義相關屬性的值,如果沒有定義則使用默認值。也可以全部使用默認值,最後通過ALTER QLOCAL命令來修改相關屬性。在同一個隊列管理器中不能有同名的隊列,可以使用REPLACE關鍵字重建已有的隊列。
4、修改本地隊列屬性(ALTER QLOCAL):
ALTER QLOCAL Q_LOCAL_NAME NEW_ATTRIBUTE。已經定義了的本地隊列可以使用ALTER QLOCAL 命令對其屬性進行修改。
5、顯示本地隊列屬性(DISPLAY QLOCAL):
DISPLAY QLOCAL Q_LOCAL_NAME ATTRIBUTE。此命令用於顯示本地隊列的屬性,可以使用默認的顯示全部屬性,也可以顯示指定的屬性。
6、復制本地隊列(DEFINE QLOCAL NEW LIKE OLD):
DEFINE QLOCAL NEW LIKE OLD。此命令可以創建一個屬性與OLD完全一樣的本地隊列。當然,我們也可以在語句後面指定屬性的詳細信息,沒有指定的則繼承OLD的對應屬性,指定了的則使用新的屬性。
7、清除本地隊列中的消息(CLEAR QLOCAL):
CLEAR QLOCAL Q_LOCAL_QUEUE。此命令用於清除本地隊列中存儲的信息。在清除信息的時候系統不會給出任何提示,而是直接把信息刪除。在一下兩種情況下不能使用CLEAR QLOCAL,本地隊列中存儲的有在最近一次隊列同步以後未提交的信息,有應用程序打開使用本地此隊列。
8、刪除本地隊列(DELETE QLOCAL):
DELETE QLOCAL Q_LOCAL_QUEUE。此命令用於刪除本地隊列,當本地隊列中存在有沒有提交的數據此隊列不能刪除。如果隊列中存在數據,且數據是提交了的,可以使用PURGE關鍵字刪除本地隊列。例如DELETE QLOCAL (Q_LOCAL_QUEUE) PURGE,在刪除的時候可以指定NOPURGE關鍵字代替PURGE以保護刪除的隊列中可能存在的已提交數據。
三、PCF commands
PCF commands允許管理員通過編程的方式將MQ的日常管理任務集成在程序中。包括創建隊列,預定義隊列,更改隊列管理器等, PCF commands與MQSC鎖實現的功能是相同。
『柒』 怎麼創建MSMQ的傳出隊列
一、MSMQ介紹和安裝消息隊列
使用消息隊列的優點:穩定、消息優先順序、離線能力以及安全性。
消息隊列分為用戶創建的隊列(專用隊列)和系統隊列,看下圖所示(myQueue為自己創建的消息隊列,msmqtriggersnotifiations為通用隊列):
對消息隊列有了簡單的了解後,使用MSMQ進行軟體開發需要安裝MSMQ,安裝完後就該進入實際的開發階段。具體的安裝過程就是在控制面板里「添加/刪除程序」下「添加/刪除Windows組件」,完成添加就OK。安裝完成後就可以通過交互界添加新的消息隊列,詳細如下圖:
出了上面這種交互界面來創建MSMQ外,也可以通過編程來完成,.NET框架里的MessageQueue類下有一靜態方法Create,用來完成消息隊列的創建,其定義如下:
1//
2// 摘要:
3// 在指定的路徑中創建非事務性「消息隊列」隊列。
4//
5// 參數:
6// path:
7// 要創建的隊列的路徑。
8//
9// 返回結果:
10// 表示新隊列的 System.Messaging.MessageQueue。
11public static MessageQueue Create(string path);
12//
13// 摘要:
14// 在指定的路徑中創建事務性或非事務性「消息隊列」隊列。
15//
16// 參數:
17// transactional:
18// 如果創建事務性隊列,為 true;如果創建非事務性隊列,則為 false。
19//
20// path:
21// 要創建的隊列的路徑。
22//
23// 返回結果:
24// 表示新隊列的 System.Messaging.MessageQueue。
25public static MessageQueue Create(string path, bool transactional);
實現消息隊列的創建簡單代碼(C#),創建一個名為"myQueue"的非事務性"消息隊列",如下:
MessageQueue.Create(@".\private$\myQueue");
二、創建、刪除和管理隊列
在.NET環境下編寫Message Queue程序的前提就是需要先安裝MSMQ,本文之前已經作了詳細的介紹。要開發MSMQ程序就必須學習一個很重要的類(MessageQueue),該類位於名稱空間System.Messageing下。其中有幾個常用的方法必須掌握:
--Create方法:創建使用指定路徑的新消息隊列。
--Delete方法:刪除現有的消息隊列。
--Existe方法:查看指定消息隊列是否存在。
--GetAllMessages()方法:得到隊列中的所有消息。
--GetPublicQueues方法:在「消息隊列」網路中定位消息隊列。
--Peek/BeginPeek方法:查看某個特定隊列中的消息隊列,但不從該隊列中移出消息。
--Receive/BeginReceive方法:檢索指定消息隊列中最前面的消息並將其從該隊列中移除。
--Send方法:發送消息到指定的消息隊列。
--Purge方法:清空指定隊列的消息。
上述列舉的方法在此就不作詳細介紹,大家可以通過下面的示常式序中來體會他們各自的功能。
三、發送和序列化消息
MSMQ消息隊列中定義的消息由一個主體(body)和若干屬性構成。消息的主體可以由文本、二進制構成,根據需要還可以被加密。在MSMQ 中消息的大小不能夠超過4MB。發送消息是通過Send方法來完成的,需要一個Message參數。
1、發送消息:
步驟:連接隊列-->指定消息格式-->提供要發送的數據(主體)-->調用Send()方法將消息發送出去。詳細見後面的示常式序。
2、序列化消息:
消息序列化可以通過.NET Framework附帶的三個預定義格式化程序來完成:
-- XMLMessageFormatter對象----MessageQueue組件的默認格式化程序設置。
-- BinaryMessageFormatter對象;
-- ActiveXMessageFormatter對象;
由於後兩者格式化後的消息通常不能為人閱讀,所以我們經常用到的是XMLMessageFormatter對象。該對象構造方法有三種重載:
1public XmlMessageFormatter();
2public XmlMessageFormatter(string[] targetTypeNames);
3public XmlMessageFormatter(Type[] targetTypes);
如我們後面的示常式序中用到的序列化語句:
1//序列化為字元串
2XmlMessageFormatter formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
『捌』 如何創建隊列
包括一些預定義的隊列。此外,如果組織需要自定義隊列,則您可以創建隊列。例如,您可以創建名為「Exchange 發送問題隊列」的呈報隊列,然後將該類型的事件呈報到該隊列。您可以使用以下過程創建隊列。創建隊列在Service Manager 控制台中,單擊「庫」。在「庫」窗格中,展開「庫」,然後單擊「隊列」。在「任務」窗格中,單擊「創建隊列」。按照以下步驟完成「創建隊列」向導: 在「開始之前」頁面上,單擊「下一步」。
在「常規」頁面上的「隊列名稱」框中,鍵入名稱。例如,鍵入 Exchange 發送問題隊列。
在「工作項類型」框旁邊,單擊省略號按鈕 (…)。在「選擇類」對話框中,選擇諸如「事件」之類的類,然後單擊「確定」。
在「管理包」列表中,選擇要在其中存儲新隊列定義的未密封的管理包。例如,選擇「Service Manager 事件管理配置庫」。然後單擊「下一步」。
在「條件」頁面上,構建要用於為隊列篩選工作項的條件,然後單擊「下一步」。只有滿足指定條件的工作項才會添加到該隊列中。
例如,在「可用屬性」區域中選擇「分類類別」屬性,然後單擊「添加」。在列表中,選擇「電子郵件問題」,然後單擊「下一步」。
在「摘要」頁面上,單擊「創建」以創建隊列。
在「完成」頁面上,單擊「關閉」。
驗證隊列的創建在Service Manager 控制台中,驗證「隊列」窗格中是否顯示了新隊列。在「任務」窗格中,單擊「屬性」,然後驗證隊列是否與您定義的一樣。
『玖』 java中創建隊列Queue的問題
Queue這是個介面,你要new一個它的實現類;例如:
Queue<Integer> queue = new ArrayBlockingQueue<Integer>(100);
『拾』 要創建一個隊列 主函數要怎麼寫
這要看你利用這個類模板來干什麼,主函數中只要寫出要實現的(或調用其它函數來實現)功能代碼即可。