Azure 服务总线消息 ID 我们的电子邮件 ID

标签 azure microsoft-graph-api azureservicebus

我正在创建一个批处理作业,以使用 Microsoft Graph API 从收件箱读取电子邮件并使用服务总线发布电子邮件内容。 我根据分配的消息 ID 在我的 Azure 服务总线中进行了重复检测。为了防止发布相同的电子邮件,我将电子邮件消息 ID 放入 Azure 服务总线消息 ID。

但是,电子邮件消息 ID 的长度似乎太长,我无法将其用作 azure 服务总线消息 ID。有关如何将电子邮件消息 ID 作为 Azure 服务总线消息 ID 的任何解决方案吗? (我不允许将电子邮件 ID 存储在任何持久性存储中,我只能通过 Azure 服务总线发布它)

谢谢

最佳答案

服务总线消息 ID 的长度不能超过 128 个字符。一般来说,值 您从 Microsoft Graph API 检索到的电子邮件 ID 如下所示:

AAMkADU1NzNkY2I2LWIxY2QtNGFhOC1iYmE5LWEzODA2ZjJkMjQxNwBGAAAAAABRRlt89urpT62rDl3o5R1RBwCSQ84srYEXTY2slhDtcrhrAAAAAAEMAACSQ84srYEXTY2slhDtcrhrAABlQp2FAAA=

一般来说,它的长度是188个字符,这导致了这个问题。

要解决这个问题,您可以尝试使用MD5为电子邮件ID创建一个统一的标识符,默认情况下,其长度将为32个字符,尽管这个值有可能与来自不同字符串的哈希,但其可能性很低(大约2^-128)。

如果您使用 C#,只需尝试以下代码:

using Azure.Messaging.ServiceBus;
using System;
using System.Security.Cryptography;
using System.Text;

namespace serviceBusTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "";
            string queueName = "";
           
            var client = new ServiceBusClient(connectionString);

            ServiceBusSender sender = client.CreateSender(queueName);

            ServiceBusMessage message = new ServiceBusMessage();
            var emailID = "AAMkADU1NzNkY2I2LWIxY2QtNGFhOC1iYmE5LWEzODA2ZjJkMjQxNwBGAAAAAABRRlt89urpT62rDl3o5R1RBwCSQ84srYEXTY2slhDtcrhrAAAAAAEMAACSQ84srYEXTY2slhDtcrhrAABlQp2FAAA=";

            message.MessageId = GetMd5Hash(MD5.Create(), emailID);

            sender.SendMessageAsync(message).GetAwaiter().GetResult();

            ServiceBusReceiver receiver = client.CreateReceiver(queueName);

            ServiceBusReceivedMessage receivedMessage = receiver.ReceiveMessageAsync().GetAwaiter().GetResult();

            Console.WriteLine(receivedMessage.MessageId);
        }

        static string GetMd5Hash(MD5 md5Hash, string input)
        {

            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));


            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }


            return sBuilder.ToString();
        }
    }
}

结果:

enter image description here

关于Azure 服务总线消息 ID 我们的电子邮件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65339100/

相关文章:

javascript - Microsoft Graph API - v1.0/me/events 禁止 403

python-2.7 - 授权 token 签名有问题

Azure 机器学习工作室训练 24 小时超时

java - 无法使用 spring 连接到 Azure SQL 数据库服务器

sql-server - 具有 Azure SQL 托管标识的 Entity Framework Core 导致用户“NT AUTHORITY\ANONYMOUS LOGON 登录失败”

由服务总线主题触发的Azure功能不起作用

azure - 导出 Azure 服务总线配置导出

azure - Terraform 依赖于模块

azure - 为后台控制台应用程序选择身份验证提供程序

javascript - InvalidAuthenticationToken 获取联系人照片