我对 ibm mq 很陌生,我发现与 mb 相关的文档或书籍很少,我找到的唯一一本是 2004 年写的“WebSphere MQ Using Java”。但现实世界已经发生了很大变化。我根据this在redhat linux 64位上成功安装并验证了mq server 7.5
我还创建了 queue manager myqm1、 queue LQ.TEST、 channelJAVA.CHANNEL并通过服务器上的命令行进行了一些测试以确保它们运行良好。但是,当我在 windows xp 上安装 mq 客户端并在 java 代码下面编写时,它总是抛出一个exception:com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'
我的代码:
导入 com.ibm.mq.*; 导入 com.ibm.mq.constants.MQConstants;
/** * 简单示例程序 */ 公共类 MQSample {
Run Code Online (Sandbox Code Playgroud)// code identifier static final String sccsid = "@(#) MQMBID sn=p000-L120604 su=_H-IvIK4nEeGko6IWl3MDhA pn=MQJavaSamples/wmqjava/MQSample.java"; // define the name of the QueueManager private static final String qManager = …
我有以下代码:
MQQueueManager mqm = null;
MQQueue mqQueue = null;
try
{
mqm = new MQQueueManager("SWIFTQM", "SWIFTCHANNEL", "localhost");
mqQueue = mqm.AccessQueue("SWIFTQ", MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING);
MQMessage mqMsg = new MQMessage();
MQGetMessageOptions mqGetMsgOpts = new MQGetMessageOptions();
mqGetMsgOpts.Options |= MQC.MQGMO_SYNCPOINT;
mqQueue.Get(mqMsg, mqGetMsgOpts);
string s1 = "";
if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)
s1 = mqMsg.ReadString(mqMsg.MessageLength);
string s2 = "";
mqQueue.Get(mqMsg, mqGetMsgOpts);
if (mqMsg.Format.CompareTo(MQC.MQFMT_STRING) == 0)
s2 = mqMsg.ReadString(mqMsg.MessageLength);
}
finally
{
if (mqQueue != null)
mqQueue.Close();
if (mqm != null)
mqm.Disconnect();
if (mqm != null)
mqm.Close(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Java与MQ建立连接。我正在使用来自IBM的以下示例代码,但是可能已经过时了。我该如何解决该问题/我缺少什么?
import com.ibm.mq.*; // Include the WebSphere MQ classes for Java package
import com.ibm.mq.jmqi.*;
import com.ibm.mq.constants.MQConstants;
public class MQSample
{
private String qManager = "your_Q_manager"; // define name of queue
// manager to connect to.
private MQQueueManager qMgr; // define a queue manager
// object
public static void main(String args[]) {
new MQSample();
}
public MQSample() {
try {
// Create a connection to the queue manager
qMgr = new MQQueueManager(qManager);
// Set up the options on the queue we …Run Code Online (Sandbox Code Playgroud) 我正在尝试让 MQ v6 使用消息标志 MQMF_SEGMENTATION_ALLOWED 和放置消息选项 MQPMO_LOGICAL_ORDER 按照 IBM 的帮助指南中的建议对消息进行分段。
ImqMessage message;
message.setFormat(MQFMT_STRING);
message.setMessageFlags(MQMF_LAST_MSG_IN_GROUP | MQMF_SEGMENTATION_ALLOWED);
/* ... */
ImqPutMessageOptions pmopts;
pmopts.setOptions(MQPMO_LOGICAL_ORDER);
if (!queue.put(message, pmopts))
{
buflen;
m_iLastError = queue.reasonCode();
CString reason;
reason.Format(_T("%d"), queue.reasonCode());
_errorMsg = "Reason code: " + reason;
/* throw exception etc.. */
}
Run Code Online (Sandbox Code Playgroud)
无论我是否指定这些标志,当我调用 put() 时,它总是返回一个 false 并且具有原因代码 (2010) MQRC_DATA_LENGTH_ERROR。
是否有任何与 v6 和分段相关的常见问题(例如它在 Windows 上不可用,任何类似的东西......),或者任何可以尝试的建议?
顺便说一句,对于稍微无上下文的代码示例,我们深表歉意。我会尽力回答人们对我的问题提出的问题。
我想将进入 MQ 队列的消息记录到数据库/文件或另一个日志记录队列中,但我无法修改现有代码。是否有任何方法可以实现某种类似于 HTTP 嗅探器的消息记录实用程序?或者也许 MQ 有一些内置的功能来记录消息?
提前感谢您的回答。
我非常了解使用SingleWrite的时间和地点可以作为MQ中的日志算法.它有利于高吞吐量,低并发工作负载.当工作负载更加并发时,TripleWrite的开销不是一个因素.
我不明白并且正在努力寻找任何信息是如何实际实现TripleWrite(自v6以来的Websphere MQ的默认值).我知道它实际上并没有将每个事务写入日志三次,并且当涉及到部分页面时,它的行为与SingleWrite不同.但它有什么不同的做法?它会调用fsync三次吗?
我没有任何真正的实际目的或问题需要解决,这比任何事情都更具好奇心.我已经使用Websphere MQ几年了,并希望更好地理解这一点.
有人能够放弃任何光明吗?
编辑:
我已经考虑了一些,其中一个选择是类似于InnoDB的DoubleWrite.InnoDB有一个双写缓冲区,在将更新写入数据文件之前,所有更改都按顺序写入.在恢复时,您有一个完整的成功编写的双写缓冲区可以从中恢复,或者表数据从未被修改过.
我不确定这是否与MQ的TripleWrite相似,因为它已在几个不同的实例中断言TripleWrite不会重复写入所有页面,并且TripleWrite在应用于部分页面时的行为与SingleWrite不同.
我有一个代码,它在连接断开或抛出异常时断开队列管理器,如下所示
if (queueManagerreceive != null)
if (queueManagerreceive.IsConnected)
{
if (queuereceive != null)
{
queuereceive.Close();
}
queueManagerreceive.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
所以当我有一个 'MQRC_RECONNECT_TIMED_OUT' 异常时,我对上面的代码有问题,然后当它执行 queuemanager.Disconnect() 时它抛出一个异常“MQRC_CONNECTION_BROKEN”并且显然这会破坏代码作为异常抛出所以当我使用 queuemanager 时。 Close() 没有抛出异常,服务稳定。
有什么不同?我应该使用什么来删除并重新创建新连接?
请帮忙。
在我们的服务器上创建 CSR 期间将生成公钥和私钥对。我们将通过持有私钥将 CSR 和公钥发送给 CA。CA 将在使用 CA 根证书的私钥对其进行签名之前验证我们的公钥。我们有自己的 CA 团队来认证 CSR 请求。我的查询如下:
我在这里先向您的帮助表示感谢。
使用 Java/Spring 与 WebSphere MQ 交互并尝试向其发送消息,Spring 不断向其添加以下标头信息:
RFH Ì ¸MQSTR ¸ <mcd><Msd>jms_text</Msd></mcd> <jms><Dst>queue:///MY.QUEUE.INFORMATION.TEST</Dst><Rto>queue:///MY.QUEUE.INFORMATION.TEST</Rto><Tms>123456789</Tms><Dlv>2</Dlv></jms>BEGINNING_OF_MY_PAYLOAD
我将如何删除所有内容并仅发送我的有效负载?人们可以在上面的代码片段中将我的有效负载称为BEGINNING_OF_MY_PAYLOAD.
这是我正在使用的功能:
public void sendMessage(final String text) {
this.jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
Message message = session.createTextMessage(text);
destination = session.createQueue("MY.QUEUE.INFORMATION.TEST");
springJmsConsumer.setDestination(destination);
message.setJMSReplyTo(destination);
return message;
}
});
}
Run Code Online (Sandbox Code Playgroud) 我对IBM MQ来说是新手。我的是一个多实例队列管理器。
一个实例就像故障转移。
即使其中之一发生故障,如何连接它们。
我不确定我的术语是否正确?
我正在尝试使用下面的示例进行连接