C# 如何从azure服务总线读取消息

C# 如何从azure服务总线读取消息,c#,azure-functions,azureservicebus,C#,Azure Functions,Azureservicebus,我正在尝试从通知的队列中读取消息,而不是使用C azure函数进行轮询 目前,我正在使用控制台应用程序将消息推送到队列中,请参见下文 似乎有两种不同的产品,azure服务总线和存储帐户中的队列。下面的代码使用了后者,我不知道如何读取队列的消息 非常感谢, 代码示例 更新 在专家建议的注释和以下链接之后,我尝试使用以下代码示例将消息推送到Azure Service Bus上,即不是存储帐户中的队列 namespace ConsoleApp1 { using System; usin

我正在尝试从通知的队列中读取消息,而不是使用C azure函数进行轮询

目前,我正在使用控制台应用程序将消息推送到队列中,请参见下文

似乎有两种不同的产品,azure服务总线和存储帐户中的队列。下面的代码使用了后者,我不知道如何读取队列的消息

非常感谢,

代码示例

更新

在专家建议的注释和以下链接之后,我尝试使用以下代码示例将消息推送到Azure Service Bus上,即不是存储帐户中的队列

namespace ConsoleApp1
{
    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;

    class Program
    {
        const string ServiceBusConnectionString = "Endpoint=sb://xxx.servicebus.windows.net/;SharedAccessKeyName=xxx;SharedAccessKey=xxx";
        const string QueueName = "name_of_queue";
        static IQueueClient queueClient;

        public static async Task Main(string[] args)
        {
            const int numberOfMessages = 10;
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            await SendMessagesAsync(numberOfMessages);

            await queueClient.CloseAsync();
        }

        static async Task SendMessagesAsync(int numberOfMessagesToSend)
        {
            for (var i = 0; i < numberOfMessagesToSend; i++)
            {
                string messageBody = $"Message {i}";
                var message = new Message(Encoding.UTF8.GetBytes(messageBody));

                Console.WriteLine($"Sending message: {messageBody}");

                // Send the message to the queue
                try
                {
                    await queueClient.SendAsync(message);  // this line
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}
当我在控制台窗口上运行代码时,没有任何操作,没有错误消息,什么都没有。。!奇怪的在azure服务总线概览中查看,it活动消息计数为零

我正在使用此示例项目,但queueClient.SendAsync从未返回。我是否需要在azure中设置一些权限

最终收到的错误

连接尝试失败,因为连接方未连接 在一段时间后或建立连接后正确响应 失败,因为连接的主机未能响应


我可以在门户服务总线屏幕中看到请求

这些是您想要的吗

1.如果您想从azure服务总线队列获取消息:

在从服务总线队列接收消息之前,我已将消息放入队列中。 结果是:

2.如果要从azure存储队列获取消息:

在接收邮件之前仍将邮件放入azure存储队列。 结果是:


如果您还有疑问,请告诉我。

这些是您想要的吗

1.如果您想从azure服务总线队列获取消息:

在从服务总线队列接收消息之前,我已将消息放入队列中。 结果是:

2.如果要从azure存储队列获取消息:

在接收邮件之前仍将邮件放入azure存储队列。 结果是:


如果您有更多疑问,请告诉我。

如何从azure服务总线上读取消息-这是一个很好的文档。您能告诉我们您尝试了什么吗?如何从azure服务总线读取消息-这是非常有文档记录的。您能告诉我们您尝试了什么吗?与其从数据湖读取文件,还可以将文件保存到数据湖上吗?Thanks@James嗨,我想你答错人了。你问的这个问题不是关于数据湖的。此问题与队列消息有关。与其从数据湖读取文件,是否可以将文件保存到数据湖?Thanks@James嗨,我想你答错人了。你问的这个问题不是关于数据湖的。此问题与队列消息有关。
namespace ConsoleApp1
{
    using System;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;

    class Program
    {
        const string ServiceBusConnectionString = "Endpoint=sb://xxx.servicebus.windows.net/;SharedAccessKeyName=xxx;SharedAccessKey=xxx";
        const string QueueName = "name_of_queue";
        static IQueueClient queueClient;

        public static async Task Main(string[] args)
        {
            const int numberOfMessages = 10;
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            await SendMessagesAsync(numberOfMessages);

            await queueClient.CloseAsync();
        }

        static async Task SendMessagesAsync(int numberOfMessagesToSend)
        {
            for (var i = 0; i < numberOfMessagesToSend; i++)
            {
                string messageBody = $"Message {i}";
                var message = new Message(Encoding.UTF8.GetBytes(messageBody));

                Console.WriteLine($"Sending message: {messageBody}");

                // Send the message to the queue
                try
                {
                    await queueClient.SendAsync(message);  // this line
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}
using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.ServiceBus;

namespace ConsoleApp2
{
    class Program
    {
        const string ServiceBusConnectionString = "xxxxxx";
        const string QueueName = "xxx";
        static IQueueClient queueClient;
        public static async Task Main(string[] args)
        {
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            RegisterOnMessageHandlerAndReceiveMessages();

            Console.ReadKey();

            await queueClient.CloseAsync();
        }
        static void RegisterOnMessageHandlerAndReceiveMessages()
        {
            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = 10,
                AutoComplete = false
            };
            queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
        }
        static async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
            await queueClient.CompleteAsync(message.SystemProperties.LockToken);
        }
        static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
        {
            Console.WriteLine($"Message handler encountered an exception {exceptionReceivedEventArgs.Exception}.");
            var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
            Console.WriteLine("Exception context for troubleshooting:");
            Console.WriteLine($"- Endpoint: {context.Endpoint}");
            Console.WriteLine($"- Entity Path: {context.EntityPath}");
            Console.WriteLine($"- Executing Action: {context.Action}");
            return Task.CompletedTask;
        }
    }
}
using System;
using Microsoft.Azure; 
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Queue;

namespace ReceiveMessageFromAzureStorageQueue
{
    class Program
    {
        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("xxxxxx");
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
            CloudQueue queue = queueClient.GetQueueReference("xxx");
            CloudQueueMessage peekedMessage = queue.PeekMessage();
            queue.FetchAttributes();
            int? cachedMessageCount = queue.ApproximateMessageCount;
            Console.WriteLine("Number of messages in queue: " + cachedMessageCount);
            for(int i=0; i<cachedMessageCount; i++) {
                    System.Threading.Thread.Sleep(10);
                    CloudQueueMessage retrievedMessage = queue.GetMessage(TimeSpan.FromMilliseconds(10));
                    Console.WriteLine(retrievedMessage.AsString);
                    queue.DeleteMessage(retrievedMessage);
            }
            Console.WriteLine("Already Read.");
        }
    }
}