如何通过CloudQueueMessage传递任意对象?

时间:2012-03-27 17:24:56

标签: java eclipse azure azure-queues

我有一个CloudQueueMessage,我想插入“Hello World” - 所以我写道:

CloudQueueMessage message = new CloudQueueMessage("Hello World");

它很完美。

我的问题是我想用一个对象代替“Hello World”:

CloudQueueMessage message = new CloudQueueMessage(new MyObject(parameter1, parameter2, ...));

但编译器不会让我,因为它告诉我:

The constructor CloudQueueMessage (MyObject) is undefined.

我如何实现我的目标?

3 个答案:

答案 0 :(得分:1)

您可以查看this question

它概述了使用C#获得“强类型队列”的技术。然而,这种方法非常简单,我相信你可以在Java中实现类似的行为。只要您可以将对象序列化为二进制数组。

如果需要,

This is a question可能会对您有所帮助。并this also

答案 1 :(得分:0)

CloudQueueMessage可以使用二进制数据或字符串构造,而不是要序列化的对象(尽管您可以自己将其序列化为字符串,然后将其存储为消息)。这就是你收到错误的原因:没有构造函数将MyObject作为参数。

有关创建CloudQueueMessage的更多详细信息,请参阅this msdn page

答案 2 :(得分:0)

以下是我用于在处理Azure队列时将对象序列化为字符串并返回的代码。只需确保您的对象很小,以便它们符合64k要求

protected CloudQueueMessage CreateCloudQueueMessage(TQueueableEntity message)
{
    using (var stringWriter = new StringWriter())
    {
        var xmlSerializer = new XmlSerializer(typeof(TQueueableEntity));
        xmlSerializer.Serialize(stringWriter, message);

        return new CloudQueueMessage(stringWriter.ToString());
    }
}

protected TQueueableEntity CreateObjectFromMessage(CloudQueueMessage message)
{
    var xmlSerializer = new XmlSerializer(typeof(TQueueableEntity));

    //Deserialize message
    using (var reader = new StringReader(message.AsString))
    {
        var result = (TQueueableEntity)xmlSerializer.Deserialize(reader);
        reader.Close();
        return result;
    }
}
相关问题