当前位置: 首页 > 知识库问答 >
问题:

Azure服务总线|启用会话|会话未接收

西门安宁
2023-03-14

我需要一起处理相同的消息集,为此,我尝试了Azure服务总线会话启用功能。为了测试这一点,我创建了一个非常简单的应用程序,一个消息在队列中成功提交,然而,当试图在“ReceiveSessionMessage”函数中接收消息时,消息会话不会返回,程序会在这一行之后退出。

我无法找出确切的根本原因,任何帮助都将不胜感激。谢谢

等待会话客户端。AcceptMessageSessionAsync();]

程序

using Microsoft.Azure.ServiceBus;
using System;
using System.Text;
using System.Threading.Tasks;

namespace TestSendReceiveMessagesAzure
{
    class Program
    {
        static string connectionString = "";
        static string queueName = "demosessionqueue";

        static void Main(string[] args)
        {
            Console.WriteLine("Test Service Bus Session! enable feature");
            SendMessage();
            Console.WriteLine("Message Pushed");
            ReceiveSessionMessage();
        }

        private static void SendMessage()
        {
            QueueClient queueClilent = new QueueClient(connectionString, queueName, ReceiveMode.PeekLock);
            string msgJson = "{PizzaType:Veggie,SessionID:SessionId0101}";
            Message message = new Message(Encoding.UTF8.GetBytes(msgJson))
            {
                SessionId = "SessionId0101"
            };
            Console.WriteLine(msgJson);
            queueClilent.SendAsync(message).Wait();
        }

        private static async Task ReceiveSessionMessage()
        {
            var sessionClient = new SessionClient(connectionString, queueName, ReceiveMode.PeekLock);
            Console.WriteLine("Accepting a message session...");
            try
            {
                var messageSession = await sessionClient.AcceptMessageSessionAsync();
                Console.WriteLine($"Message.SessionID={messageSession.SessionId}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
        }
    }
}

控制台输出

共有1个答案

倪子晋
2023-03-14

问题在于《宣言》的问题

静态void Main(字符串[]args),以及其中的调用方法“ReceiveSessionMessage()。从程序调用此函数的正确方法。cs是

  static async Task Main(string[] args)
    {

        Console.WriteLine("Message Session Handler..");
        await MessageSessionReceiver();
    }

“ReceiveSessionMessage”函数是一个异步函数,调用函数没有提到wait关键字,因此程序退出。在将语法更改为addawait之后,它工作了。

 类似资料:
  • 我正在使用带有.NET核心的Azure服务总线 在我们的应用程序中,我们正在向服务总线发送会话消息。每当我们收到带有session-Id的取消请求时,我们需要删除/删除/完成带有该特定sessionId的消息,而不需要进行任何进一步的处理 但我得到了错误-请求的会话'session-name'不能被接受。它可能被另一个接收器锁定。

  • 根据https://docs.microsoft.com/en-us/Azure/Azure-functions/functions-bindings-service-bus-trigger?tabs=CSharp#usage(emphasis mine)的文档,是允许的参数类型之一: 下列参数类型可用于队列或主题消息: 字符串-如果消息是文本。 字节[]-用于二进制数据。 自定义类型-如果消息包

  • 我们使用Azure服务总线队列,并使用AcceptMessage会话(代码如下)接收消息。 接受消息会话成功,但当我在消息会话上调用接收时,返回null。 这种情况不会一直发生,而是在创建队列一段时间后发生。发生这种情况时,我验证了队列不是空的。当我关闭消息会话我看到我的队列缩短(在正确的消息数量!)但是我没有收到我的信息... 我使用的代码是: 更新: 我怀疑,虽然某些会话的所有消息都已过期,但

  • 我正在用java编写代码(使用Azure SDK for java),我有一个包含会话消息的服务总线队列。我想接收这些消息并将它们处理到另一个地方。 我使用QueueClient连接到队列,然后使用registerSessionHandler处理消息(下面的代码)。 问题是,每当收到消息时,我都可以打印有关它的所有详细信息,包括内容,但它会打印10次,每次之后都会打印一个异常。(打印10次:我理解

  • 我读过关于命名空间属性的文章。我尝试使用此功能: 它工作得很好。 作为一项改进,我希望覆盖会话服务,因此它将在任何地方使用,并使用依赖注入,而不是将会话服务耦合到addProduct函数中。 为此,我编辑了我的services.yaml 然后我更新CartController: 现在我得到了以下错误消息: 检测到服务“会话”的循环引用,路径:“会话”- 这个错误应该在这个问题上得到解决:#3626

  • 我试图使用Spring Cloud的Zuul、Eureka和我自己的服务实现微服务架构。我有多个具有UI和服务的服务,每个服务都可以使用x509安全性对用户进行身份验证。现在我想把祖尔放在那些服务机构的前面。由于Zuul无法将客户端证书转发到后端,我认为下一个最好的方法是在Zuul的前门对用户进行身份验证,然后使用Spring会话在后端服务中复制他们的身份验证状态。我遵循了Dave Syer的教程