当我尝试从一个简单的控制台应用程序(不是在调试模式)向我的Azure Service Bus队列发送1000条简单消息时,使用http模式需要90秒.
使用标准的nettcp模式需要70秒.
其他人的速度也是吗?我预计它会更快,但也许这是正确的?
在Azure的事件概述枢纽条规定如下:
分区数在事件中心创建时指定,并且必须介于8和32之间.分区是一种数据组织机制,与使用应用程序所需的下游并行度相关,而不是与事件中心吞吐量相关.这使得Event Hub中分区数量的选择与您期望拥有的并发读取器数量直接相关.创建事件中心后,分区计数不可更改; 您应该根据长期预期规模来考虑这个数字.您可以通过联系Azure Service Bus团队来增加32分区限制.
由于在初始创建后无法更改事件中心上的分区数,为什么不总是将其配置为最大分区数,32?这样做我没有看到任何定价影响.有一些表现权衡吗?
另外,作为另一方面,我似乎能够创建一个少于8个分区的事件中心.文章说它必须在8-32之间.不知道为什么会这么说......
我正在使用代码片段将消息发送到服务总线主题.
try
{
// sb is instance of ServiceBusConfig.GetServiceBusForChannel
await sb.SendAsync(message);
}
catch (Exception ex)
{
this.logger.LogError(
"chanel",
"An error occurred while sending a notification: " + ex.Message,
ex);
throw;
}
Run Code Online (Sandbox Code Playgroud)
和实施是
public async Task SendAsync(BrokeredMessage message)
{
if (this.topicClient == null)
{
this.topicClient = TopicClient.CreateFromConnectionString(this.primaryConnectionString, this.topicPath);
this.topicClient.RetryPolicy = this.retryPolicy;
}
await this.topicClient.SendAsync(message);
}
Run Code Online (Sandbox Code Playgroud)
错误:-
"ErrorCode,12005,Message,""发送通知时发生错误:操作未在分配的超时00:01:00内完成.分配给此操作的时间可能是较长超时的一部分. .在异常类型和适当的异常处理,异常"" Microsoft.ServiceBus.Messaging.MessagingException更多信息:该操作没有的00:01:00在规定的超时时间内完成分配给此操作的时间可能是一部分更长的超时.
有关异常类型和正确异常处理的更多信息
c# azure azureservicebus asp.net-web-api azure-servicebus-topics
对于此方法:
public static SubscriptionClient CreateFromConnectionString(string connectionString, string topicPath, string name)
Run Code Online (Sandbox Code Playgroud)
什么是topicPath?
MSDN表示它是“主题的完整路径名”。
什么是路径名?
有一些代码示例,但是我还没有找到一个可以解释这个小细节的示例。
假设我有一组List<BrokeredMessage>
消息要批量发送到Azure Service Bus.
集合大小是任意的,因此所有消息的总大小可能超过Service Bus强加的256k的限制.如何以最佳方式将其拆分为较小的块?
这个任务似乎很简单,但似乎不是:BrokeredMessage
在我尝试发送它之前,每个的大小都是未知的.Size
property只返回消息体的大小,没有头和其他开销.
如果我尝试发送每条250字节的1000条消息,我会得到MessageSizeExceededException
.问题是,现在我甚至无法重试,因为消息已被消耗,所以我必须重新创建所有BrokeredMessage
的消息.
因此,我现在看到的唯一方法是在发送大量小消息时对批量大小非常保守,这可能会花费我一些吞吐量.
有更可靠和/或更干净的方式吗?
我打开一个全新的azure函数项目,我的包是:
我使用servicebustrigger,我的功能代码是基本的:
public static class Function1
{
[FunctionName("OrderPusherFunction")]
public static Task Run([ServiceBusTrigger("orders","orderpusher", Connection ="ServiceBus")]
string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有:Azure Functions Core Tools(2.0.1-beta.22)和Function Runtime Version:2.0.11415.0
当我运行时,我得到" 绑定类型'serviceBusTrigger'未注册 "错误,并且该函数不会被触发.有人有想法吗?这在我看来是一个基本设置..
我有一个队列,其中放置了大量高频数据。我有一个 azure 函数,该函数将在向其中写入新消息并将消息写入 Azure sql 数据库时触发。我的问题是有太多的消息要写,所以我想做的是“积累”消息,然后一次将它们全部写入数据库。我在 Azure 函数服务总线集成中没有看到任何类型的功能来获取所有(或 x)消息并处理它们。
这样的事情可能吗?
任何帮助表示赞赏。
我正在尝试使用服务总线绑定输出为JavaScript Azure Function中的服务总线消息设置元数据。不幸的是,绑定似乎只支持身体。
查看这些文档,我发现您可以通过以下方式在服务总线触发器中访问此信息,context.bindingData
但是我没有看到用于服务总线输出的任何相应接口。
我有一个 v.2 服务总线触发器函数,当我尝试启动时,它抛出以下异常:
System.InvalidOperationException
HResult=0x80131509
Message=The host has not yet started.
Source=Microsoft.Azure.WebJobs.Host
StackTrace:
at Microsoft.Azure.WebJobs.JobHost.StopAsync() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\JobHost.cs:line 121
at Microsoft.Azure.WebJobs.Hosting.JobHostService.StopAsync(CancellationToken cancellationToken) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Hosting\JobHostService.cs:line 32
at Microsoft.Extensions.Hosting.Internal.Host.<StopAsync>d__10.MoveNext()
Run Code Online (Sandbox Code Playgroud)
我四处搜索,但找不到任何有类似问题(并修复)的人。我正在运行 VS 15.8.7,并更新了所有扩展和包。
这是我的函数的样子:
[FunctionName("ServiceBusListenerFunction")]
public static void Run([ServiceBusTrigger("myTopic", "MySubscription", Connection = "MyConnection")]string mySbMsg, ILogger log)
{
log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");
}
Run Code Online (Sandbox Code Playgroud)
这是我的 local.settings.json:
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"MyConnection": "UseDevelopmentStorage=true",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true"
},
"Host": {
"LocalHttpPort": 7077
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试在 launchSettings.json 中执行以下操作,但没有帮助:
{
"profiles": { …
Run Code Online (Sandbox Code Playgroud) azure azureservicebus azure-servicebus-queues azure-functions
从理论上讲,相对于消息和接收者,蔚蓝服务总线队列看起来是一对一的。只是想知道队列中是否可以有多个侦听器。
如果为1:1,是否意味着要实现竞争性的消费者模式,我们就不能使用队列,而主题是唯一的选择吗?