表存储密钥作为消息进入Azure队列

时间:2018-05-09 05:09:56

标签: .net azure azure-storage azure-table-storage azure-storage-queues

我能够将rowkey和分区键插入Azure表存储:

  

TableOperation insertOperation = TableOperation.Insert(customer1);   table.Execute(insertOperation);   StoreKeyInQ(insertOperation);

// Create a new customer entity.
        CustomerEntity customer1 = new CustomerEntity("URL", "Name"+Guid.NewGuid());
        customer1.path = fullpath;

" CustomerEntity"如下:

public class CustomerEntity : TableEntity
    {
        public CustomerEntity(string ID, string Name)
        {
            this.PartitionKey = ID;
            this.RowKey = Name;
        }

        public CustomerEntity() { }

        public string path { get; set; }


    }

我已编写代码来创建一个队列,如下所示:

 public void StoreKeyInQ(TableOperation insertOperation)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        //craete a queue client
        CloudQueueClient cloudQueueClient = storageAccount.CreateCloudQueueClient();
        //retrive a reference to a container
        CloudQueue cloudQueue = cloudQueueClient.GetQueueReference("myqueue");
        //create the queue if does not exists
        cloudQueue.CreateIfNotExists();

       // Create a message and add it to the queue.
       CloudQueueMessage message = new CloudQueueMessage(insertOperation); //Here is the error as "CloudQueueMessage" can't take a argument type "TableOperation"
       queue.AddMessage(message);
    }

如何解决此错误?如何传递" rowkey"和"分区"表存储到队列的关键?

  EDIT:

我添加了这两行用于序列化就可以了吗?

 System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(customerEntity.GetType());
        CloudQueueMessage message = new CloudQueueMessage(x.ToString());

我的队列显示如下;但是,不确定这是否正确?任何人都可以澄清 - 这是正确的吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

  

如何解决此错误?

如果我们要将消息插入队列中。我们可以得到操作队列

来自Get started with Azure Queue storage using .NET

代码演示

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("RowKey, PartitionKey ");
queue.AddMessage(message);
  

如何将表存储的“rowkey”和“partition”键传递给队列?

您可以将模型序列化为字符串,然后将其另存为消息,或者您可以使用自定义格式保存消息,例如消息格式:RowKey, PartitionKey

  

基本上,想法是将RowKey + PartitionKey存储在队列中,并创建一个辅助角色以从队列中检索密钥(RowKey + PartitionKey)。

如果您只想检索队列消息,我们可以使用许多便宜的方法,例如Webjob queue triggerazure function queue trigger

<强>更新

请尝试使用以下代码。

using Newtonsoft.Json;
CloudQueueMessage message = new CloudQueueMessage(JsonConvert.SerializeObject(customer1));
cloudQueue.AddMessage(message);

enter image description here

有关更多演示代码,请参阅SerializeObjectDeserialize对象。