我正在处理一个在 .Net 中实现的系统,使用 AMPQ 使用用户名和密码以及主机、端口和协议将消息发布到 Active MQ Artemis 实例。 amqps://guest:[电子邮件受保护]:1234
我想更改设置并将其指向 Azure 服务总线实例上的主题。 Azure SB 允许你设置共享访问策略,该策略提供连接字符串和密钥。 Endpoint=sb://[主机名]/;SharedAccessKeyName=[名称]Key;SharedAccessKey=[key]
那么如何在 Azure 中设置访问权限以允许系统像这样进行连接?
AFAIK,C# 中没有直接方法或连接参数来与
RabbitMQ Shovel AMQP Connection String
连接,但您可以使用 C# 通过将 queue 或主题与 amqps://rabbitmq-shovel:Stri[email protected]:5671/?sasl=plain
连接来将消息发布到队列。
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.");
}
}
}
}
输出: