我有一个使用AppFabric自动启动的svc.我想要做的是通过总线公开我的服务的wsdl.在内部服务和wsdl工作正常,我也可以通过总线消费服务没有问题.我唯一无法正确配置的是在继电器上查看wsdl.
在ServiceHostFactory
创建默认端点,也增加了Azure的端点,希望一个MEX终结一起暴露在继电器的WSDL.当我尝试从服务总线URL查看wsdl时,我得到了不匹配的错误,可能是由于ACS身份验证失败了?
...cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree
Run Code Online (Sandbox Code Playgroud)
我是否需要将mex端点设置为匿名身份验证,以便我可以访问浏览器并查看wsdl?只是不确定还有什么可以尝试...任何帮助将不胜感激!
示例网址:
http://myservicebusexample.servicebus.windows.net/MyService/AService.svc?wsdl
要么
http://myservicebusexample.servicebus.windows.net/MyService/AService.svc/mex
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
Run Code Online (Sandbox Code Playgroud)
所以这是我的 ServiceHostFactory
// Create host with default endpoints
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
host.AddDefaultEndpoints();
// Create Relay Endpoint for Azure
ServiceEndpoint relayEndpoint = host.AddServiceEndpoint(typeof(IMyContract), new BasicHttpRelayBinding("MyAzureBindingConfiguration"), relayAddress);
// Apply ACS Credentials for the relay endpoint
relayEndpoint.ApplyEndpointBehaviorConfig("MyAzureACSCredentials");
// Create mex …
Run Code Online (Sandbox Code Playgroud) 我们需要在ServiceBus主题上发送大量消息.目前的大小约为10MB.我们最初的做法是在BlobStorage中保存一个临时文件,然后发送一个参考blob的消息.压缩文件以节省上传时间.它工作正常.
今天我读了这篇文章:http://geekswithblogs.net/asmith/archive/2012/04/10/149275.aspx 建议将消息分成较小的块,然后在接收端再次聚合它们.
我可以承认这是一种"更清洁的方法",避免了往返BlobStore的往返.另一方面,我更喜欢保持简单.分裂机制引入了更高的复杂性.我的意思是他们从一开始就没有把它包括在ServiceBus中的原因一定是这样的...
有没有人尝试过现实生活中的分裂方法?
有更好的模式吗?
我正在努力将SignalR体验集成到Azure基础架构中.
基本上,用户会在网站上采取一些操作,触发Web服务器上的函数调用(通过SignalR).处理该请求可能需要一些时间,用户可以通过单击发送数十个或数百个请求.我正在创建一个Service Bus队列来将这些任务发送给WebJob/Worker来处理它们,一旦它们准备好,它们就会将它发送回另一个队列(响应队列).
也就是说,为了提供令人敬畏的用户体验,如果用户仍然处于与以前相同的页面上,并且如果处理已准备好,我希望它在这些任务完成时实时更新它们.如果用户固定在一个前端盒子上(由于SignalR WebSocket连接),这应该是微不足道的,但事实并非如此,因此不同的前端可能需要处理该响应消息并通过SignalR调用浏览器.
当我在第一个队列中发布消息时,我将包括SignalR ConnectionId.响应完成后,ConnectionId包含在响应消息中,这使我有机会进行呼叫.
HubContext.Clients.Client(connectionId).AddItemsResult(response);
Run Code Online (Sandbox Code Playgroud)
我的问题是关于服务总线主题 - 或另一种我不完全理解的解决方案.我需要通知每个WebServer处理每个响应,因为我无法确定哪个Web服务器实际上会将SignalR调用到客户端.
1)服务总线主题是正确的方法吗?
2)我需要动态地创建N个订阅(每个Web服务器一个),这似乎很奇怪.如果服务器死了又永远不会回来会怎么样?我有一个订阅,不再有订阅者?
基本上,我只是想创建一个简单的发布者 - 订阅者模式,我可以在他们上线时拥有N个动态订阅者(听众).
我们遇到了很多这些异常,在高峰流量期间向EventHubs发送事件:
"无法将事件发送到EventHub.例外:Microsoft.ServiceBus.Messaging.MessagingException:服务器无法处理请求;请重试该操作.如果问题仍然存在,请联系您的Service Bus管理员并提供跟踪ID." 或"无法将事件发送到EventHub.例外:System.TimeoutException:操作未在分配的时间内完成"
你可以在这里清楚地看到它:
正如您所看到的,当传入的消息超过400K事件/小时(或~270 MB /小时)时,我们得到了许多内部错误,服务器忙错误,失败请求.这不仅仅是一个短暂的问题.这显然与吞吐量有关.
我们的EH有32个分区,7天的消息保留和5个吞吐量单位.OperationTimeout设置为5分钟,我们使用默认的RetryPolicy.
我们还需要在这里调整一下吗?我们真的很关心EH的可扩展性.
谢谢
我花了几天时间测试MassTransit 3.1.2,以查看是否可以在应用程序中将它与Azure Service Bus一起使用。
我使用MassTransit.AzureServiceBus(3.1.2)通过两个控制台应用程序制作了一个示例:一个发布者和一个订阅者。
它运作良好。当我启动应用程序时,实体(队列,主题,订阅)将自动在Azure上的命名空间上创建。
当您测试事物但在生产中时,这很好,我不希望该应用程序被允许创建实体。我们想预先创建它们。
为此,我认为使用仅具有“发送”或“监听”权限的SAS策略连接到总线是一个好主意(在使用具有“管理”权限的名称空间策略之前)。
现在,我在这一点上苦苦挣扎,无法正常工作,总是遇到401错误如果我不使用具有“管理”权限的策略,则必须对此操作要求管理声明。
我尝试直接在名称空间或实体上设置策略,但没有成功。
之后,我分析了堆栈跟踪异常(用[...]省略了无用的部分):
System.UnauthorizedAccessException: Le serveur distant a retourné une erreur : (401) Non autorisé. Manage claim is required for this operation. TrackingId:2ca420e3-aac6-467c-bacb-6e051dbc3e39_G47,TimeStamp:1/29/2016 11:20:41 PM ---> System.Net.WebException: Le serveur distant a retourné une erreur : (401) Non autorisé.
à System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
à Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1.<GetAsyncSteps>b__3c(GetAsyncResult`1 thisPtr, IAsyncResult r)
à Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
--- Fin de la trace de la pile d'exception interne --- …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Azure Service Bus提高Windows服务的吞吐量.我注意到的是,如果我有像这样的代码.
client.OnMessageAsync(async message =>
{
var timer = new Stopwatch();
timer.Start();
bool shouldAbandon = false;
try
{
// asynchronouse processing of messages
await messageProcessor.ProcessAsync(message);
Interlocked.Increment(ref SimpleCounter);
// complete if successful processing
await message.CompleteAsync();
}
catch (Exception ex)
{
shouldAbandon = true;
Console.WriteLine(ex);
}
if (shouldAbandon)
{
await message.AbandonAsync();
}
timer.Stop();
messageTimes.Add(timer.ElapsedMilliseconds);
},
options);
Run Code Online (Sandbox Code Playgroud)
选项在哪里
OnMessageOptions options = new OnMessageOptions
{
MaxConcurrentCalls = maxConcurrent,
AutoComplete = false
};
Run Code Online (Sandbox Code Playgroud)
增加MaxConcurrentCalls在一定数量之后几乎没有影响(12-16通常用于我正在做的事情).
但是,使用相同的MaxConcurrentCalls创建多个客户端(QueueClient)确实可以提高性能(几乎是线性的).
所以我一直在做的是使#queueclient和maxconcurrentcalls可配置,但我想知道是否有多个队列客户端是最好的方法.
所以我的问题是:是否有多个队列客户端的消息泵为Windows服务和天蓝色服务总线运行不良或良好的做法?
我有一个WebJob,只要ServiceBus队列项出现就会被触发
public static void ProcessQueueMessage(
[ServiceBusTrigger("%ServiceBusHighPriorityQueueName%")] BrokeredMessage message)
Run Code Online (Sandbox Code Playgroud)
一些网站声明如下
我假设ServiceBus队列触发器处理程序是"触发"而不是"连续",那么在设置webjob-publish-settings.json参数runMode时应该使用什么?
由于它被触发,AppService仍然需要是AlwaysOn吗?
我希望能够控制Azure功能在运行时读取的服务总线队列或订阅的名称.
使用WebJobs(Azure Functions基于),您可以通过实现和配置自定义来执行此操作INameResolver
,请参阅:如何为Web作业处理创建基于配置的队列名称?
但是,使用Azure功能,我无权连接JobHostConfiguration
此自定义解析程序.
我还可以使用INameResolver
,如果是这样的话怎么样?
azure azureservicebus azure-functions azure-functions-runtime
我是Azure Service Bus的新手,想知道我是否可以将多个订阅者添加到队列或主题中?在Rabbit MQ中,我可以拥有1个发布者的多个订阅者.
我想要做的是,我正在使用CQRS,当某些命令在处理事件时进入系统时,我想将它们推入消息队列.
我希望2个订阅者能够从该队列中获取消息,其中一个用于我内部处理.另一个用于处理并向外发送.
正在查看Azure Service Bus来替换一些不可靠的RabbitMQ服务器,而价格方面尚不清楚的一件事是,出于计费目的,它们究竟算作“代理连接”是什么?
我们有大约12台计算机正在处理超过1000个队列中的消息(其中一台计算机正在填充队列),那么在1台计算机上运行的1个应用程序是否被视为一个代理连接(无论它正在侦听多少个队列)?或将每台机器算作1,000+撮合连接(这可能加起来非常快)?
假设我做了这样的事情:
var queues = queueNames.Select(q =>
{
if (!manager.QueueExists(q))
{
manager.CreateQueue(q);
}
return new QueueClient(ServiceBusConnectionString, q);
}).ToArray();
Run Code Online (Sandbox Code Playgroud)
Add queueNames
是一个由10个字符串组成的数组。那是10个代理连接吗?1个 或者是其他东西?
azureservicebus ×10
azure ×9
c# ×4
asp.net ×1
masstransit ×1
message ×1
signalr ×1
size ×1
wsdl ×1