使用IBM.XMS .NET客户端如何将IBM MQ的IBytesMessage保存为文件
实现方案
直接通过IBytesMessage自带的方法读取完整字节数组即可,步骤如下:
- 先调用
Reset()方法重置消息体的读取游标到起始位置,避免读取内容不全 - 通过
BodyLength属性获取消息体总字节数,初始化对应容量的字节数组 - 调用
ReadBytes()方法将完整消息体写入字节数组,后续直接写入文件即可
修改后的完整代码示例:
message = consumer.Receive(TIMEOUTTIME); if (message != null) { _log.LogInformation("Message received."); var fileName = _fileUtil.GenerateFileName(_queueName); // 自行替换为实际存储目录拼接逻辑 var filepath = Path.Combine("你的本地存储目录", fileName); if (message is ITextMessage textMsg) { // 文本消息如果也需要存为文件,可转成对应编码的字节数组写入,示例为UTF8编码 var textBytes = System.Text.Encoding.UTF8.GetBytes(textMsg.Text); File.WriteAllBytes(filepath, textBytes); } else if (message is IBytesMessage bytesMsg) { // 重置读取游标到消息开头 bytesMsg.Reset(); // 初始化和消息体长度一致的字节数组 byte[] result = new byte[bytesMsg.BodyLength]; // 读取完整内容到字节数组 bytesMsg.ReadBytes(result, (int)bytesMsg.BodyLength); // 写入本地文件 File.WriteAllBytes(filepath, result); } }
注意:如果单条消息体长度超过int最大值(约2GB),需要拆分多次读取,常规zip等二进制文件场景下上述代码可直接使用。
内容的提问来源于stack exchange,提问作者Nirjal Khadka
相关产品推荐
相关产品推荐

