我正在尝试使用在C#.NET上编写的客户端应用程序向ActiveMQ服务器发送消息。我有XML消息,我已将其转换为Zip流并尝试发送。
public IMessage SendMessage(string mqUri, string brokerUri, MemoryStream message, string username, string password)
{
Uri connecturi = new Uri(mqUri);
IConnectionFactory factory = new NMSConnectionFactory(connecturi);
using (IConnection connection = factory.CreateConnection(username, password))
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, brokerUri);
using (IMessageProducer producer = session.CreateProducer(destination))
{
connection.Start();
IBytesMessage request = session.CreateBytesMessage(message.ToArray());
producer.Send(request);
return request;
}
}
}
在解析数据时,在服务器端出现异常,如:
执行JMS消息侦听器失败。引起:[org.apache.camel.RuntimeCamelException - 由于以下原因无法提取正文:javax.jms.JMSException:无法从字节构建正文。原因:java.io.StreamCorruptedException:无效的流标头:00010000。消息:ActiveMQObjectMessage。
当我调试代码并设置断点时,Bodylength和内容上有例外' request.Content'抛出类型' Apache.NMS.MessageNotReadableException'
的例外在ActiveMQ服务器上是否有任何特殊的zip转换来发送消息?请帮忙。感谢
答案 0 :(得分:0)
问题是将zip转换为 memorystream ,后来我发现它需要将.xml文件转换为 zipstream 而不是zip文件。
public static MemoryStream CreateZipStream()
{
using (ZipFile zip = new ZipFile())
{
MemoryStream outputStream = new MemoryStream();
outputStream.Seek(0, SeekOrigin.Begin);
string filePath =
@"C:\YourXml.xml";
zip.AddFile(filePath);
zip.Save(outputStream);
return outputStream;
}
}