『壹』 怎样才能用代码创建一个消息队列
你在创建抄公有队列,而你的机器不属于任何域。一般工作组安装的计算机只能创建私有队列。
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);
『拾』 要创建一个队列 主函数要怎么写
这要看你利用这个类模板来干什么,主函数中只要写出要实现的(或调用其它函数来实现)功能代码即可。