问题标签 [azureservicebus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
808 浏览

wcf - 可怕的 BizTalk 接收位置错误

我刚刚注意到使用 WCF-Custom 适配器连接到服务总线队列的 BizTalk 中的一个主要错误(除非我遗漏了什么)。

我注意到一条消息没有从队列中到达 BizTalk,所以我检查了接收位置是否在 BizTalk 中运行。

但是我可以看到消息堆积在队列中。

BizTalk 没有提供警告或错误消息,并且 BizTalk 没有指示接收位置已失去与队列的连接。

当我重新启动接收位置时,我可以看到服务总线管理控制台中的消息计数下降到零,因此 BizTalk 似乎失去了连接,甚至没有注意到它。

如果我没有遗漏重要的东西,这是 BizTalk 中的一个非常严重的错误,因为它会在没有任何警告或明显原因的情况下阻止流程。

我有 2 位同事也遇到了这个问题,但我认为他们使用的是 sftp 适配器。

其他人对这种行为有任何经验吗?

我试着用谷歌搜索它,但什么也没找到。

0 投票
2 回答
12809 浏览

azure - Azure 服务总线和消息会话

我一直在研究 Azure 服务总线队列(不是Azure 存储队列)。我读过的所有细节都表明它支持FIFO 语义,但仅在“消息传递会话”的上下文中。问题是我似乎找不到任何关于这在 Azure 上下文中到底是什么的信息。这是 WCF 构造,还是 Azure 服务总线特有的构造?我假设它与本地交易无关,但我不是 100% 确定。

任何指针都会非常有帮助。谢谢!

0 投票
1 回答
2308 浏览

azure - Azure 服务总线队列:未发送消息

我正在从工作角色向服务总线队列发送消息。我注意到随机丢失了一些消息。

当我调试时,我在 Send 方法之后设置了一个断点并登录到我的 Azure 面板以检查消息队列是否增加。我发现奇怪的是,有时消息没有添加到队列中。但这不是随机的。模式是:一条消息添加正确,下一条丢失,然后再次下一条正常,下一条丢失。

我已经实现了如下所示的重试模式,但显然并非所有消息都正确发送。

我的代码是:

有什么问题?

0 投票
1 回答
1252 浏览

azure - 命名空间中的多个中继端点用于通过服务总线公开服务?

我无法激活由同一 NAMESPACE 中的两个不同中继端点公开但地址不同的服务。如果我删除其中一个服务激活正常,所以配置很好。我尝试更改绑定的类型,更改名称空间,添加两个行为配置而不是仅添加一个,但我总是得到相同的错误(在底部)。

有人知道我是否遗漏了什么吗?我可以在同一个命名空间中有两个中继端点吗?

错误是:

一个 ExceptionDetail,可能由 IncludeExceptionDetailInFaults=true 创建,其值为:System.ArgumentException:该值无法添加到集合中,因为集合已包含相同类型的项:“Microsoft.ServiceBus.NameSettings”。此集合仅支持每种类型的一个实例。参数名称:System.Collections.Generic.KeyedByTypeCollection 处的项1.InsertItem(Int32 index, TItem item) at Microsoft.ServiceBus.ServiceRegistrySettings.System.ServiceModel.Description.IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) at System.ServiceModel.Description.DispatcherBuilder.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection parameters) at System.ServiceModel.Description.DispatcherBuilder.GetBindingParameters(ServiceHostBase serviceHost, Collection1 个端点)在 System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized() 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension) 在 System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()。 ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData() 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] 查询, Message& replyMessage) 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest ) 在 System.ServiceModel.Dispatcher.SyncMethodInvoker 的 SyncInvokeGet(Object , Object[] , Object[] )。在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher .ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)进程(布尔 isOperationContextSet)进程(布尔 isOperationContextSet)

0 投票
4 回答
5859 浏览

azure - Azure 服务总线 BrokeredMessage 已被使用?

Azure 服务总线出现间歇性问题。偶尔,在总线上放置消息会导致以下异常:

类型:无效操作异常

MESSAGE:无法执行操作,因为代理消息“723eab13dab34351a78bb687d0923b89”已被消费。请使用新的 BrokeredMessage 实例进行操作。

堆栈跟踪

AzureBus 的违规代码是:

传入的 T 消息是

_retryPolicy 是一个

_timeToLive 是 12 小时的时间跨度

有任何想法吗?

0 投票
2 回答
2207 浏览

c# - Azure 服务总线中继 - 启用压缩

在将Azure 服务总线中继netTcpRelayBinding和结合使用时,我们遇到了速度问题basicHttpRelayBinding。对于较小的消息大小 ( 10K ),中继以低延迟 ( 100ms ) 运行,但随着消息大小的增加 ( 100K ),我们会经历看似随机的响应时间 ( 600ms-1000ms )。我们希望改善较大消息的延迟成本。

服务总线中继是否支持使用消息压缩(gzipprotobuf-net等)?有没有人成功通过中继启用请求/响应压缩?通过 IIS 支持响应压缩很简单,但我们希望支持请求压缩以降低延迟成本。由于我们无法使用Fiddler分析中继,我们如何知道消息在通过中继时仍然被压缩?


我们发现的一个有趣的点是,在后续消息中继之间引入延迟 ( 2s ) 我们会获得更好的性能 ( 1​​00K - 200ms )。是否会自动限制较大的消息?很高兴知道触发限制条件的消息大小截止值。

对于我们的测试 - 我们只是向服务中继发送一个随机消息字符串并从服务器回显请求字符串。我们已经从多个地理位置尝试了这个客户端/服务器(以排除防火墙/Web 过滤器问题)并经历了相同的延迟行为。

服务器端

客户端

0 投票
4 回答
5834 浏览

amazon-ec2 - 连接到 AWS 上的 Windows Server 服务总线

我正在使用新的 Windows Server Service Bus 1.0 Beta 开始一个新项目的工作。我正在尝试在 AWS EC2 虚拟机上设置测试环境。

我已经在 AWS EC2 上运行的 Windows Server 2008 R2 实例上安装了服务总线,并根据 MSDN 文档中的示例设置了新的农场、容器和主机。我在服务器上打开了所有正确的端口(4443 和 9354)。我还按照 [this page][1] 中的说明将自行生成的证书导出到我的客户端计算机上。

我有一个非常简单的 C# 程序,它创建一个队列、对消息进行排队并接收它。当我将可执行文件复制到 VM 并在那里运行时,该程序运行良好,因此我相信我正确使用了 API。但是,当我从指向 AWS 服务器的本地开发框运行程序时,我会遇到安全异常。

我的代码如下所示:

我的异常跟踪如下所示:

我有一种预感,问题是我使用虚拟机的 IP 地址而不是 FQDN 进行连接,但是我不知道如何确认,也不知道如何为我的 AWS 服务器获取域名。服务器有一个机器名称,但只是在工作组“WORKGROUP”上,而不是在域上。

任何和所有的帮助将不胜感激。

0 投票
3 回答
3062 浏览

asp.net-mvc-3 - Azure 服务总线 - 双向通信性能挑战

我需要在发布者和订阅者之间建立双向通信。这是为了方便前端 MVC3 应用程序使用相关过滤器定义订阅,然后将消息放置到主题上。最后,MVC3 控制器在 SubscriptionClient 上调用 BeginReceive(),并等待响应。

问题似乎是这些订阅对象的创建和删除。开销是巨大的,它会减慢应用程序的速度。更不用说要解决的各种限制,例如一个主题不超过 2000 个订阅。

在发布者和订阅者之间建立这种双向通信的最佳实践是什么?我们希望 MVC3 应用程序发布一条消息,然后等待对该确切消息的响应(通过 CorrelationId 属性和 CorrelationFilter)。我们已经缓存了 NamespaceManager 和 MessagingFactory,因为它们在资源方面也非常昂贵,而且还因为我们被告知 Service Bus 使用显式配置模型,我们需要在角色启动期间预先创建大部分这些东西。

因此,这给我们带来了将请求与响应关联起来的挑战,以及创建和删除订阅的巨大开销。有什么更好的做法?我们是否应该保留 SubscriptionClients 的缓存,并每次交换过滤器?其他人都做什么?我需要通过 Web 角色集群获得每秒 5 到 10,000 个 MVC3 请求的请求吞吐量。我们已经在使用 AsyncController 并在 SubscriptionClient 上使用异步 BeginReceive()。在这一点上,似乎是成千上万的订阅的创建和删除正在阻塞系统。

更新1: 根据此处提供的重要建议,我们更新了此解决方案,以在每个 Web 角色实例上保留 SubscriptionClient 对象的缓存。此外,我们已迁移到面向 MessageSession 的方法。

但是,这仍然没有缩放。看来 AcceptMessageSession() 是一个非常昂贵的操作。MessageSession 对象是否也应该被缓存和重用?每个打开的 MessageSession 对象是否都使用到服务总线的连接?如果是这样,这是否计入订阅的并发连接配额?

非常感谢。我认为我们正在到达那里。Web 上的大多数示例代码显示:Create Topic(),然后 CreateSubscription(),然后 CreateSubscriptionClient(),然后在客户端上 BeginReceive(),然后拆除所有对象。我只能说,如果你在现实生活中这样做,你的服务器就会崩溃,你很快就会用尽连接。

我们需要通过这个东西每秒发出数千个请求,很明显这些对象必须被大量缓存和重用。那么,MessageSession 是另一个要缓存的项目吗?我会享受缓存的乐趣,因为我们必须实现一个引用计数机制,一次只能给出一个对 MessageSession 的引用,因为这是针对特定于 http 请求的请求/响应,我们不能有其他的订阅者同时使用 MessageSession 对象。

UPDATE2: 好的,缓存 MessageSession 以供重复使用是不可行的,因为它们的生存时间与订阅上的 LockDuration 一样长。这是一个无赖,因为最大 LockDuration 是 5 分钟。这些似乎是针对短期发布/订阅的,而不是针对长期运行的分布式进程。看起来我们需要回到轮询 Azure 表。

总结/评论 我们尝试在服务总线上构建,因为它具有规模潜力及其持久性和交付语义。但是,似乎有些情况(其中的大量请求/响应)不适合它。发布部分工作得很好,在后端有竞争的消费者很好,但是让前端请求等待一个定义的、单一的消费者响应,根本不能很好地扩展,因为 MessageSessions 需要太长时间才能完成通过 AcceptMessageSession() 或 BeginAcceptMessageSession() 创建,因为它们不适合缓存。

如果有人有另一种观点,我很想听听。

0 投票
0 回答
162 浏览

azure - ServiceBus WorkerRole 诊断监视器错误

我有一个 WebRole 和 2 个 ServiceBus WorkerRoles 正在运行,在角色的 OnStart 期间我得到以下异常:[System.ArgumentOutOfRangeException] 容器 log4net 参数名称无效的语法:initialConfiguration

在开发 Azure 环境和云中本地运行时会发生这种情况。所有角色都具有以下配置设置:

所有角色在 OnStart 中都有以下代码:

堆栈跟踪:

在 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorConfiguration.Validate(String paramName, Nullable`1 resourceSize) 在 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.StartWithExplicitConfiguration(DiagnosticMonitorStartupInfo startupInfo, DiagnosticMonitorConfiguration initialConfiguration) 在 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.Start(CloudStorageAccount storageAccount, DiagnosticMonitorConfiguration initialConfiguration) 在 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.Start(String diagnosticsStorageAccountConfigurationSettingName, DiagnosticMonitorConfiguration initialConfiguration) 在 CICRMIntegrationQueue.WorkerRole.OnStart() 在 c:\Projects\Client\Connection Intelegence\CICloud\CICRMIntegrationQueue\WorkerRole.cs:line 193

当我在所有 3 个角色中都有一个本地存储和轮询时,似乎会发生此错误DiagnosticMonitor,当只定义一个角色时,不会发生错误。

0 投票
1 回答
1280 浏览

azure - Azure 服务总线 - SubscriptionClient.AcceptMessageSession() 与 SubscriptionClient.BeginAcceptMessageSession()

在 Azure 服务总线命名空间中,有一种SubscriptionClient类型,它具有以这种方式启动 MessageSession 的方法:-

这是同步版本,它返回一个 MessageSession。该库还提供了一个异步版本,BeginAcceptMessageSession()。这个让我很吃惊,因为它调用了一个回调,传入一个 IAsyncResult 和你希望传递的任何状态对象。在我的例子中,我传递了 SubscriptionClient 实例,以便我可以在 SubscriptionClient 上调用 EndAcceptMessageSession()。BeginAcceptMessageSession() 的返回类型为 void。

如何访问通过 BeginAcceptMessageSession() 接受的 MessageSession?我在回调的结果参数中得到的只是我的 SubscriptionClient 实例,我需要它来通过 EndAcceptMessageSession() 终止 BeginAcceptMessageSession()。

MessageSession 引用无处可寻。该文档在这方面没有帮助。在 Google 上搜索仅显示很少的 3 页搜索结果,其中大部分只是来自 MSDN 的方法本身的在线描述。我查看了 AsyncManager.Parameters ,它也是空的。

有谁知道应该如何调用 BeginAcceptMessageSession() 以便我可以获得对由此创建的 MessageSession 的引用?