使用用户名和密码通过 AMQP 发布到 Azure 服务总线主题

问题描述 投票:0回答:1

我正在处理一个在 .Net 中实现的系统,使用 AMPQ 使用用户名和密码以及主机、端口和协议将消息发布到 Active MQ Artemis 实例。 amqps://guest:[电子邮件受保护]:1234

我想更改设置并将其指向 Azure 服务总线实例上的主题。 Azure SB 允许你设置共享访问策略,该策略提供连接字符串和密钥。 Endpoint=sb://[主机名]/;SharedAccessKeyName=[名称]Key;SharedAccessKey=[key]

那么如何在 Azure 中设置访问权限以允许系统像这样进行连接?

.net azure amqp
1个回答
0
投票

AFAIK,C# 中没有直接方法或连接参数来与

RabbitMQ Shovel AMQP Connection String
连接,但您可以使用 C# 通过将 queue 或主题与
amqps://rabbitmq-shovel:Stri[email protected]:5671/?sasl=plain
连接来将消息发布到队列。 enter image description here

  • 我使用此链接将Azure服务总线连接字符串转换为RabbitMQ Shovel AMQP连接字符串。

enter image description here

enter image description here

enter image description here

static async Task Main(string[] args)
    {
        string baseUri = "http://localhost:15672";
        string username = "guest";
        string password = "guest";

        // Login to RabbitMQ Management HTTP API
        string loginUri = $"{baseUri}/api";
        using (var httpClient = new HttpClient())
        {
            var authBytes = Encoding.UTF8.GetBytes($"{username}:{password}");
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Basic {Convert.ToBase64String(authBytes)}");

            var response = await httpClient.GetAsync(loginUri);

            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Successfully logged in to RabbitMQ Management HTTP API.");
                // Now, you can send a message or perform other management operations.
                await SendMessageToQueue(baseUri, username, password);
            }
            else
            {
                Console.WriteLine("Failed to log in to RabbitMQ Management HTTP API.");
            }
        }
    }

    static async Task SendMessageToQueue(string baseUri, string username, string password)
    {
        string queueName = "azures";
        string message = "Message from C# code.";

        string publishUri = $"{baseUri}/api/exchanges/%2F/amq.default/publish";

        var content = new StringContent($"{{\"properties\":{{}},\"routing_key\":\"{queueName}\",\"payload\":\"{message}\",\"payload_encoding\":\"string\"}}", Encoding.UTF8, "application/json");

        using (var httpClient = new HttpClient())
        {
            var authBytes = Encoding.UTF8.GetBytes($"{username}:{password}");
            httpClient.DefaultRequestHeaders.Add("Authorization", $"Basic {Convert.ToBase64String(authBytes)}");

            var response = await httpClient.PostAsync(publishUri, content);

            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Message sent successfully.");
            }
            else
            {
                Console.WriteLine("Failed to send message.");
            }
        }
    }
}


输出:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.