我有一个关于 Websphere MQ 的查询。我想列出队列深度大于零的所有队列。
类似于: runmqsc 队列管理器名称
显示 QLOCAL(*) WHERE(CURDEPTH) GT 0
不确定语法。有人可以帮忙吗
我有 IBM MQ XMS 的发送者和接收者控制台应用程序。发送方填充队列,接收方使用 receive 方法使队列管理器出列。我使用带有 bool 值的 while 循环来继续运行接收器,以便每当队列中存在新消息时接收器都可以获取该数据。现在我想将接收器代码更改为异步消息监听器而不是consumer.Receive()。代码片段是,
consumerAsync = sessionWMQ.CreateConsumer(destination);
messageListener = new MessageListener(OnMessageCallBack);
consumerAsync.MessageListener = messageListener;
connectionWMQ.Start();
While(true)
{
console.writeline("Wait for message");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只获取已经可用的数据,而不是新的数据。例如,如果我在启动接收器应用程序时队列中有 2 个数据,那么这些消息就会被下载。但是,当我保持接收器应用程序运行并从发送器应用程序发送新数据时,它不会被下载,我必须重新启动接收器应用程序才能获取该数据。类似的场景在同步模式consumer.ReceiveNoWait() 中运行良好。
我缺少什么?
当尝试使用 .net 标准 nuget 包 IBMMQDotnetClient 通过 TLS ({"MQRC_HOST_NOT_AVAILABLE"}) 连接到 IBM MQ 时,我们会抛出异常。该项目使用.net Framework 4.7.2。我们能够在不使用 SSL 的情况下进行连接,并且当我们切换到 .net 框架 nuget 包 WebSphereMQClient 时,我们也能够使用 SSL 进行连接,使用完全相同的代码和设置(只需换出 nuget 库即可使其正常工作) )。
此外,我无法启用 .net 标准库的跟踪。文档表明需要设置环境变量 MQDOTNET_TRACE_ON,但即使在那之后我也没有生成任何内容。我尝试添加其他变量,例如 MQERRORPATH,但仍然没有看到任何跟踪文件。
代码
var queueManagerName = "QM1";
var hostName = "hostname.com";
var channel = "DEV.APP.SVRCONN";
var queueName = "DEV.QUEUE.1";
var port = "1414";
var sslKeyRepository = "*USER";
var cipherSpec = "TLS_RSA_WITH_AES_256_CBC_SHA256";
Hashtable prop = new Hashtable();
prop.Add(MQC.HOST_NAME_PROPERTY, hostName);
prop.Add(MQC.PORT_PROPERTY, port);
prop.Add(MQC.CHANNEL_PROPERTY, channel);
prop.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT);
prop.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
prop.Add(MQC.SSL_CERT_STORE_PROPERTY, sslKeyRepository);
prop.Add(MQC.SSL_CIPHER_SPEC_PROPERTY, …Run Code Online (Sandbox Code Playgroud) 我想使用Websphere MQ(7)提供的资源适配器从JBoss AS服务器(5.1)连接到WSMQ队列(在我公司网络外部的服务器上运行).
我设置了一个连接工厂,并希望将其配置为使用我们的代理服务器,这是连接到网络外部的机器所必需的.我们的代理服务器需要身份验证
我找到了(MQConnectionFactory)属性proxyHostName,proxyPort但没有办法添加身份验证(用户名/密码).
Java属性http.proxyHost等没有任何区别,这是有道理的,因为JMS不使用http.
配置socksProxyHost,socksProxyPort,java.net.socks.username和java.net.socks.password性能也没有任何影响.
我在这里不知所措,如何使用需要身份验证的代理服务器从JBoss AS连接到远程WSMQ队列?
我"com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2393'"在下面的代码中得到异常。我的要求是使用SSL服务器连接通道连接QM。不需要客户端身份验证。
import com.ibm.mq.*;
public class MQSeriesDataCollector implements CustomDCInf
{
public static void main (String [] args)
{
String qName="apm_qm";
MQEnvironment.hostname=args [0];
MQEnvironment.channel=args [1];
MQEnvironment.port=Integer.parseInt(args [2]);
MQEnvironment.sslFipsRequired=true;
MQEnvironment.sslCipherSuite = "SSL_RSA_WITH_RC4_128_MD5";//RC4_MD5_US
MQQueueManager qMgr=null;
try{
qMgr = new MQQueueManager("apm_qm");
}catch (MQException mqe){
mqe.printStackTrace();
}
PCFMessageAgent agent=null;
StringBuffer output = new StringBuffer();
MQSeriesDataCollector mqTest=new MQSeriesDataCollector();
try{
agent = mqTest.getMQConnection(qMgr);
output.append(mqTest.getQueueStats(agent));
}
catch(MQException mqe){
System.out.println("Error:" + mqe.reasonCode + " Description:"+PCFConstants.lookupReasonCode (mqe.reasonCode));
mqe.printStackTrace();
}
catch(NoClassDefFoundError ex){ …Run Code Online (Sandbox Code Playgroud) 按照略有修改的例子,我有:
public class MqTestClient {
public static void main(String[] args) throws Exception {
MQQueueConnectionFactory factory =
new MQQueueConnectionFactory();
factory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
factory.setHostName("127.0.0.1");
factory.setPort(1414);
factory.setQueueManager("QMA");
factory.setChannel("FROM_CHANNEL");
MQQueue queue = new MQQueue("QUEUE_FROM");
// connection pooling
MQEnvironment.addConnectionPoolToken();
System.out.println("Sending...");
for (int i = 0; i < 5; i++) {
MQQueueConnection con = (MQQueueConnection)
factory.createConnection();
Run Code Online (Sandbox Code Playgroud)
使用MQ Explorer,我设置了一个Receiver Channel FROM_CHANNEL和一个本地队列QUEUE_FROM.这一切都在一台Ubuntu机器上运行.我得到"远程通道的类型不适合所请求的操作".从我的搜索看起来这只是指发送者没有发送到接收者频道,在这种情况下不是这种情况.
Exception in thread "main" com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: null
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:585)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:221)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:426)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6902)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6277)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:285)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6233)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:120)
at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:203)
at MqTestClient.main(MqTestClient.java:33)
Caused …Run Code Online (Sandbox Code Playgroud)
当我在处理Message-Queue时,遇到静态队列和动态队列这个词.
任何人都可以告诉我区别吗?
我需要为IBM MQ编写简单的Java客户端.使用WebSphere MQ classes for Java(com.ibm.mq.jar)而不是使用WebSphere MQ classes for JMS(jms.jar)在Java中编写MQ客户端有什么好处?
在64位计算机上安装mq v8客户端后,很少有文件夹(错误,退出,退出64,跟踪..),mqclient.ini丢失.甚至没有创建日志/跟踪.有没有人遇到过这个问题.我试图清理安装几次,同样的msi在其他机器上工作正常以下是唯一安装的文件夹
我过去使用RabbitMq作为MessageQueue,在收到消息时触发事件真的很简单。
我查看了IBM安装程序随附的.NET源,但是发现一种不好的方法来处理它。查看示例SimpleSubscribe可以完成这样的工作
// getting messages continuously
for (int i = 1; i <= numberOfMsgs; i++)
{
// creating a message object
message = new MQMessage();
try
{
topic.Get(message);
Console.WriteLine("Message " + i + " got = " + message.ReadString(message.MessageLength));
message.ClearMessage();
}
catch (MQException mqe)
{
if (mqe.ReasonCode == 2033)
{
++time;
--i;
Console.WriteLine("No message available");
Thread.Sleep(1000);
//waiting for 10sec
if (time > 10)
{
Console.WriteLine("Timeout : No message available");
break;
}
continue;
}
else
{
Console.WriteLine("MQException caught: {0} - {1}", …Run Code Online (Sandbox Code Playgroud)