我们使用Azure服务总线队列,并使用AcceptMessage会话(代码如下)接收消息。
接受消息会话成功,但当我在消息会话上调用接收时,返回null。
这种情况不会一直发生,而是在创建队列一段时间后发生。发生这种情况时,我验证了队列不是空的。当我关闭消息会话我看到我的队列缩短(在正确的消息数量!)但是我没有收到我的信息...
我使用的代码是:
public IEnumerable<T> ReceiveBatch<T>(TimeSpan waitTime)
{
MessageSession sessionReceiver = null;
IEnumerable<T> retval;
QueueClient queueClient = GetQueueClient<T>();
try
{
sessionReceiver = queueClient.AcceptMessageSession(waitTime);
retval = ReceiveSessionMessages<T>(sessionReceiver);
}
finally
{
if (sessionReceiver != null) sessionReceiver.Close();
}
return retval;
}
private IEnumerable<T> ReceiveSessionMessages<T>(MessageSession receiver)
{
receiver.PrefetchCount = 10;
BrokeredMessage message;
var retval = new List<T>();
while ((message = receiver.Receive()) != null)
{
var item = message.GetBody<T>();
if (!Equals(item, default(T))) retval.Add(item);
}
return retval;
}
更新:
我怀疑,虽然某些会话的所有消息都已过期,但会话本身仍然存在,因此它被接受,但没有收到任何消息。
这里需要考虑的两个项目是使用<代码>预取计数>代码>进行隐式批处理,而不是使用“代码”> CyrEffeBuffs< /Cord> API来显式地获取一组消息。请参阅下面的代码示例。
private IEnumerable<T> ReceiveSessionMessages<T>(MessageSession receiver)
{
var retval = new List<T>();
var messages = receiver.ReceiveBatch(10);
foreach(BrokeredMessage message in messages)
{
var item = message.GetBody<T>();
if (!Equals(item, default(T))) retval.Add(item);
}
return retval;
}
同样,如果您收到消息会话
,但没有消息可以详细说明它们是否已过期?您是否设置了TimeToLive
值,或者在到达MaxDeliveryCount
后消息会变成死信。
我正在用java编写代码(使用Azure SDK for java),我有一个包含会话消息的服务总线队列。我想接收这些消息并将它们处理到另一个地方。 我使用QueueClient连接到队列,然后使用registerSessionHandler处理消息(下面的代码)。 问题是,每当收到消息时,我都可以打印有关它的所有详细信息,包括内容,但它会打印10次,每次之后都会打印一个异常。(打印10次:我理解
我需要一起处理相同的消息集,为此,我尝试了Azure服务总线会话启用功能。为了测试这一点,我创建了一个非常简单的应用程序,一个消息在队列中成功提交,然而,当试图在“ReceiveSessionMessage”函数中接收消息时,消息会话不会返回,程序会在这一行之后退出。 我无法找出确切的根本原因,任何帮助都将不胜感激。谢谢 等待会话客户端。AcceptMessageSessionAsync();]
参考https://github.com/Azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.Azure.servicebus/basicsendreceiveusingtopicsubscriptionclient,我了解Azure服务总线主题的一般工作方式,我的问题更多地是关于它实际上是如何工作的。
在我的聊天应用程序中,每当用户收到新消息时,我使用FCM和Firebase功能发送通知。 为此,我有一个FirebaseMessagingService,它覆盖了。除此之外,此服务还覆盖。每当用户第一次启动应用程序时,就会调用,我检索一个新令牌并将其存储在Firebase实时数据库中。 然后我去和一些用户聊天(不关闭应用程序)。当我收到新消息时,我会收到通知。调用。 问题是,当我关闭应用程序,然后
我正在使用带有.NET核心的Azure服务总线 在我们的应用程序中,我们正在向服务总线发送会话消息。每当我们收到带有session-Id的取消请求时,我们需要删除/删除/完成带有该特定sessionId的消息,而不需要进行任何进一步的处理 但我得到了错误-请求的会话'session-name'不能被接受。它可能被另一个接收器锁定。
我希望以批处理模式接收来自Azure ServiceBus主题的消息。 阅读https://docs.microsoft.com/en-us/Azure/Azure-functions/functions-best-practices时指出: 我有一个方法: 这个方法是有效的,但它一次只需要一个消息。 根据Microsoft文档,我可以将其更改为: 注意:主题和订阅已启用“启用批处理操作”设置。