标签: azureservicebus

尝试通过主题/订阅接收Azure Service总线消息时的序列化异常

在尝试解析订阅Azure Service Bus主题时收到的消息时,我收到了序列化异常.有人看到我错过了吗?我正在使用Microsoft.ServiceBus.Samples.Messaging作为Silverlight代码.

我有一个带有以下代码的web服务:

public void PushCommand(Command command, int posLocationId)
{
    var topicName = "topicName";
    var topicClient = TopicClient.CreateFromConnectionString(ConnectionString, topicName);

    try
    {
         var message = new BrokeredMessage("test");
         topicClient.Send(message);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个SilverLightClient,代码如下:

private void OnReceiveMessageCompleted(IAsyncResult result)
{
     var subscriptionClient = (SubscriptionClient)result.AsyncState;
     try
     {
         var message = subscriptionClient.EndReceive(result);

         if (message != null)
         {
             String s = message.GetBody<string>();
         }

         // prep for next message
         subscriptionClient.BeginReceive(this.OnReceiveMessageCompleted, subscriptionClient);

     }
     catch (Exception e)
     {
        //unknown error
     }
}
Run Code Online (Sandbox Code Playgroud)

捕获了SerializationException反序列化System.String类型的对象时出错.根级别的数据无效.第1行,第1位.

堆栈跟踪:

at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName) …
Run Code Online (Sandbox Code Playgroud)

azure azureservicebus azure-sdk-.net azure-servicebus-queues

1
推荐指数
1
解决办法
2492
查看次数

如何使用Azure Service Bus HTTP API对消息进行死信

我正在尝试与Azure Service Bus集成以执行代理消息传递.我以前成功使用过托管的.NET API,但这次我需要使用HTTP API.

处理消息时,如果我确定消息有毒(即永远无法成功处理),我想将消息移动到死信队列.

在托管API中,我调用BrokeredMessage.DeadLetterAsync()它可以让我指定对消息进行死字的原因,并将其作为原子操作移动到死信队列.

在阅读了HTTP API文档后,我发现并调用了操作来执行其他操作,例如peek-lock,删除锁定的消息或放弃锁定,但我找不到对死信的显式操作一个消息.

HTTP API中是否存在此操作?

azure azureservicebus

1
推荐指数
1
解决办法
1623
查看次数

访问 Azure 服务总线的可靠性如何?

我有一个运行第三方服务器进程的 Azure VM。这个服务器进程通过调用我给它的可执行文件来通知我重要的事件,将一些数据作为命令行参数传递。

这些数据需要排队并由另一个工作人员处理。

不要错过这些通知非常重要,所以我想知道:

  • 将消息直接排队到 Azure 服务总线是否可以接受(根据我的要求)?

  • 或者我应该先排队到本地 MSMQ,然后让另一个工作人员从 MSMQ 读取消息并将它们推送到 Azure 服务总线?

谢谢

azure azureservicebus

1
推荐指数
1
解决办法
1577
查看次数

Windows Azure Service Bus和Windows Azure虚拟网络之间的区别

我想从Azure连接到On-Premises数据库.基本上我将在azure上托管我的Web应用程序,并将使用On-Premises的数据库.

根据www.WindowsAzure.com,Azure Service Bus和Windows Azure虚拟网络都用于连接到本地数据库.但是这两者之间有什么区别,哪些应该根据不同的情况使用?

azure azureservicebus azure-virtual-network

1
推荐指数
1
解决办法
370
查看次数

WebJob ServiceBus主题权限

我参与了一个多层项目,其中一部分正在消耗来自第三方系统的"事件"流.供应商通过Azure Service Bus主题发布这些主题 - 它们提供,控制和管理总线.我们只提供了URI,TopicName和Subscription详细信息.

我们的方法是使用ServiceBusTriggerSDK中提供的Webjob组合来处理侦听新消息并触发将它们处理到我们的系统中.然而,由于这项工作一直无法从主题中读取,我们似乎已经遇到了障碍.这项工作失败了,含糊不清Timeout Exception:

Unhandled Exception: System.TimeoutException: The timeout elapsed upon attempting to obtain a token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
---> System.IdentityModel.Tokens.SecurityTokenException: The token provider was unable to provide a security token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
Token provider returned message: 'The operation has timed out'.
Run Code Online (Sandbox Code Playgroud)

但进一步下来,跟踪包括:

[ERR] at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.OnEndTopicExists(IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.EndTopicExists(IAsyncResult result)
Run Code Online (Sandbox Code Playgroud)

供应商随后确认了Subscription对主题的唯一许可/声明是 Listen

任何人都可以确认许可要求是ServiceBusTrigger什么?

而作为一个+1,假设它,无论出于何种原因,需要更多Listen(即需求Manage),是否有人愿意提出另一种方法?丢失WebJob基础设施似乎很遗憾(该项目已经有3个其他工作) - 特别是丢失了来自主题的消息的异步和并发处理等功能

c# azure azureservicebus azure-webjobs azure-webjobssdk

1
推荐指数
1
解决办法
911
查看次数

如何在Azure功能中使用具有主题/订阅的ServiceBus触发器

我想创建一个在将新消息添加到主题/订阅时触发的Azure功能.

目前我使用ServiceBusQueueTrigger C#模板创建了Azure函数, 并将队列名称设置为

topicPath + "/Subscriptions/" + subscriptionName
Run Code Online (Sandbox Code Playgroud)

Azure Functions ServiceBusQueueTrigger C#模板

但我有这个例外:

Microsoft.ServiceBus:无法获取实体'topic-test/Subscriptions/subscription-test',因为它不是QueueDescription类型.检查您使用的是具有正确实体类型的方法.System.Runtime.Serialization:第1行位置错误1762.期望来自命名空间' http://schemas.microsoft.com/netservices/2010/10/servicebus/connect '的元素'QueueDescription '..遇到'无',名称为' ',命名空间''..

无法在Azure功能中创建具有主题/订阅的ServiceBusTrigger

我认为Azure功能正在使用MessagingFactory.CreateMessageReceiver初始化消息泵但不是.

目前是否有对主题/订阅的支持?

c# azureservicebus azure-servicebus-topics azure-functions

1
推荐指数
1
解决办法
4406
查看次数

Azure Service Bus重试策略不会更改行为

我正在尝试了解Azure Service Bus上的重试策略,但是它没有按我期望的方式工作。我有以下代码,它们既侦听消息,又将消息发送到特定的天蓝色队列。

using System;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;

namespace ServiceBusTester
{
    class Program
    {
        static void Main(string[] args)
        {
            var connectionString = "Endpoint=sb://<NamespaceName>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<SharedAccessKey>";
            var queueName = "MyTestQueue";

            var retryPolicy = new RetryExponential(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(30), 15);

            var ns = NamespaceManager.CreateFromConnectionString(connectionString);
            ns.Settings.RetryPolicy = retryPolicy;

            if (!ns.QueueExists(queueName))
                ns.CreateQueue(queueName);

            var mf = MessagingFactory.CreateFromConnectionString(connectionString);
            mf.RetryPolicy = retryPolicy;

            var mr = mf.CreateMessageReceiver(queueName);
            mr.RetryPolicy = retryPolicy;

            var retryCount = 0;

            mr.OnMessage(_ =>
            {
                retryCount++;
                Console.WriteLine($"{retryCount.ToString().PadLeft(4, ' ')} - Message Received: {_.GetBody<string>()}");
                _.Abandon();
            }, new OnMessageOptions() { AutoComplete …
Run Code Online (Sandbox Code Playgroud)

c# azure azureservicebus azure-servicebus-queues

1
推荐指数
1
解决办法
5012
查看次数

使用NService Bus发布大量消息

我想使用n服务总线发布大量消息.我找到了一个重载的Publish方法,它将消息列表作为参数.当我尝试使用它时,它显示以下错误

  var message= new Message
                    {                           
                        Id = id,
                        Timestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local),
                        PublishingStartTimestamp = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local)

                    };

                    bus.Publish(new[] { message, message});
Run Code Online (Sandbox Code Playgroud)

错误:'NServiceBus.IBus.Publish(params T [])'已过时:'已删除以减少复杂性和API混淆.有关更多信息,请参阅https://github.com/Particular/NServiceBus/issues/1346.将在5.0.0版本中删除.

什么是发布大量邮件的替代方法. 我的任务是每秒发布600个事件. 有人可以帮忙吗?

提前致谢!

nservicebus azureservicebus

1
推荐指数
1
解决办法
688
查看次数

如何使用 Java 将错误消息移动到 Azure 死信队列?

我们使用 Azure 服务总线队列在不同系统之间交换消息。我们想使用 Java 代码将无效消息移动到死信队列。

我能够将消息移动到主队列,但不能移动到死信队列。我试图将队列名称指定为“BasicQueue/$deadletterqueue”,但出现错误。

java azure azureservicebus azure-servicebus-queues

1
推荐指数
1
解决办法
1184
查看次数

同一订阅者的 Azure 服务总线多个实例

我有一种情况,我有一个 asp.net 核心应用程序,它在启动时将订阅客户端注册到一个主题 ( IHostedService),这个订阅客户端本质上有一个回调字典,每当它检测到一个主题中的新消息时,它就需要触发一个 id(这个 id 存储在消息属性中)。这本字典存在于应用程序的整个生命周期中,并且在内存中。

在 azure 上的 asp.net 核心应用程序服务的单个实例上一切正常,一旦我扩展到 2,我注意到有时订阅中的回调没有触发。这是有道理的,因为我们现在有两个实例,每个实例都有自己的回调字典存储。

所以我更新了代码来检查订阅的id是否存在,如果不存在,则放弃消息,如果存在,则获取回调并调用它。

public async Task HandleMessage(Microsoft.Azure.ServiceBus.Message message, CancellationToken cancellationToken)
{
    var queueItem = this.converter.DeserializeItem(message);

    var sessionId = // get the session id from the message
    if (string.IsNullOrEmpty(sessionId))
    {
         await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
         return;
    }

    if (!this.subscriptions.TryGetValue(sessionId, out var subscription))
    {
        await this.subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
        return;
    }

    await subscription.Call(queueItem);

    // subscription was found and executed. Complete message
    await this.subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}
Run Code Online (Sandbox Code Playgroud)

但是,问题仍然存在。我唯一的猜测是,在调用时AbandonAsync,同一个实例再次接收消息?

我想我真正想问的是,如果我有多个主题订阅客户端实例都指向该主题的同一个订阅者,是否所有实例都可以获得消息的副本?或者是不能保证的。

azureservicebus azure-servicebus-topics asp.net-core

1
推荐指数
1
解决办法
2507
查看次数