SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, topicname, subscription_name);
// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);
// Callback to handle received messages.
Client.OnMessage((message) =>
{
try
{
// Process message from queue.
string payload = message.GetBody<string>();
var myData = JsonConvert.DeserializeObject<MyData>(payload);
if(myData != null)
{
//Timestamp is not in order, when I connect after few minutes
Debug.WriteLine("SBC ==> " + myData.Timestamp);
}
// Remove message from queue.
message.Complete();
}
catch (Exception)
{
// Indicates a problem, unlock message in queue.
message.Abandon();
}
}, options);
输出
SBC ==> 5/23/2017 1:06:43 PM
SBC ==> 5/23/2017 1:06:45 PM
SBC ==> 5/23/2017 1:07:23 PM
SBC ==> 5/23/2017 1:07:19 PM
SBC ==> 5/23/2017 1:07:27 PM
SBC ==> 5/23/2017 1:07:07 PM
SBC ==> 5/23/2017 1:06:49 PM
SBC ==> 5/23/2017 1:07:47 PM
SBC ==> 5/23/2017 1:06:47 PM
SBC ==> 5/23/2017 1:08:03 PM
SBC ==> 5/23/2017 1:06:55 PM
SBC ==> 5/23/2017 1:06:51 PM
SBC ==> 5/23/2017 1:07:03 PM
SBC ==> 5/23/2017 1:07:51 PM
SBC ==> 5/23/2017 1:06:57 PM
SBC ==> 5/23/2017 1:07:05 PM
SBC ==> 5/23/2017 1:07:39 PM
SBC ==> 5/23/2017 1:07:43 PM
SBC ==> 5/23/2017 1:06:59 PM
SBC ==> 5/23/2017 1:07:09 PM
SBC ==> 5/23/2017 1:06:53 PM
SBC ==> 5/23/2017 1:07:33 PM
SBC ==> 5/23/2017 1:07:25 PM
SBC ==> 5/23/2017 1:07:57 PM
SBC ==> 5/23/2017 1:08:13 PM
谁能解释一下为什么会这样吗?这对我来说有点迷惑?
虽然azure服务总线提供FIFO(先进先出)功能,但它只在不中断的会话中才真正起作用。正如您所经历的:
但是,如果我保持客户端连接,则会按顺序接收消息
要绕过这个问题,您可以使用不同的模式。看看下面链接中的ReceiveAndDelete和PeekLock模式。
编辑
此链接包含有关FIFO的一些详细信息
下面是该文档中的一段引语,它指定您需要使用消息传递会话来获取FIFO。
我正在使用azure service bus主题,我已经为它订阅启用了会话。 在my logic应用程序中,我使用来自主题的sql事务插入数据,我使用主题订阅(peek-lock)并在订阅服务器级别将并发设置为默认,如下所示 根据我的理解,我的逻辑应用程序(订阅者)应该读取所有的消息,并且必须在FIFO中处理 我的逻辑应用程序像
参考https://github.com/Azure/azure-service-bus/tree/master/samples/dotnet/gettingstart/microsoft.Azure.servicebus/basicsendreceiveusingtopicsubscriptionclient,我了解Azure服务总线主题的一般工作方式,我的问题更多地是关于它实际上是如何工作的。
我用来接收消息的代码如下: 当我运行它时得到的是下一个信息: 如果我从线程中运行接收器,它会显示这条错误消息(当跳过该超时时,我应该删除该超时,因为在等待的守护进程中它不能跳过)。基本上都是同样的错误: 更新 我认为问题出在Azure服务总线和订阅和过滤器上。实际上,我有23个过滤器,我认为Azure服务总线只工作于1个订阅:(但我不确定这一点。
我想将一个小的JSON消息放入中。消息将具有附加到它的“ProviderID”属性,并且根据筛选规则,该消息将被筛选到特定于提供程序的上 但是,我似乎无法在上指定共享访问策略,以限制第三方提供商仅连接到他们自己的 我假设应该在订阅上设置以便将这些消息发送到另一个并在那里应用特定于提供程序的安全性,这样做是否正确。 或者有其他/更好的/推荐的方法来做这件事。
我正在使用代码实现Azure服务总线主题,这些主题可以在以下位置找到:https://docs.microsoft.com/en-us/Azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions 我尝试运行订阅者程序的两个实例,它包含以下方法: 但是,这不允许两个订户都接收消息,它接收的消息是两个订户
我正在使用Azure服务总线主题机制。此外,我已经将消息发送到主题,并希望通过编程方式检查是否将消息发送到主题。 代码: 有没有办法获得响应或状态代码?