2016-07-26 136 views
0

我们需要Azure中的API来存储通过HTTP发送给它(代理)的消息,以防我的系统(云服务)不可用或数据库繁忙。改变准确的消息将被发送并不容易。什么方法可以在Azure上创建这样的代理?如何在Azure上为匿名HTTP API消息创建代理?

服务总线队列看起来很有趣,但据我所知,它需要Shared Access Signatures

另一个WebRole应该是一个解决方案,但它需要时间来实现。

带一些工具(MSMQ?)的虚拟机似乎是一种方式,但它需要维护。

您认为如何?

+0

你可以存储在队列中的消息,甚至Blob存储,并有一个函数应用该消息被触发作为一个事件,然后处理该消息,并将其发送到任何你想要的地方.. – Aravind

+0

@Aravind如果我不能修改我的客户,我将如何在队列(服务总线,对吧?谢谢! – Artyom

+0

它可以是服务总线或存储队列。您必须至少修改您的客户端应用程序以将消息发送到特定的新端点。 – Aravind

回答

2

您的场景是应用队列中心工作模式的主要候选人。

http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-with-windows-azure/queue-centric-work-pattern

Loosely Coupled

如果任你的工人(S)或数据库变得不可用,消息仍然处于持久存储和以后消耗。

任务队列可以采取Azure存储队列或服务总线队列的形式。在每一个伟大的设计中,做这项工作的最不复杂的部件都是胜利的。在这种情况下,这将是Azure存储队列,耐用,可靠,移动部件非常少。除非你绝对需要精确的FIFO排序,在这种情况下,你需要使用服务总线。

https://msdn.microsoft.com/en-us/library/dn568101.aspx

此解决方案具有以下优点:

  • 它使得固有负载调平系统,它可以在由应用程序实例发送请求量处理宽的变化。队列充当应用程序实例与使用者服务实例之间的缓冲区,这有助于最大限度地降低应用程序和服务实例的可用性和响应性的影响(如基于队列的负载均衡模式所述)。处理需要执行一些长时间运行的处理的消息不会阻止消费者服务的其他实例同时处理其他消息。

  • 它提高了可靠性。如果生产者直接与消费者沟通而不是使用这种模式,但不监督消费者,消费者失败的可能性很大,即消息可能丢失或无法处理。在这种模式下,消息不会发送到特定的服务实例,失败的服务实例不会阻止生产者,并且消息可以由任何工作服务实例处理。

  • 它不需要消费者之间或生产者与消费者实例之间的复杂协调。消息队列确保每条消息至少被传递一次。

  • 它是可扩展的。随着消息量的波动,系统可以动态地增加或减少消费者服务的实例的数量。

  • 如果消息队列提供事务性读操作,它可以提高弹性。如果消费者服务实例将消息作为事务操作的一部分进行读取和处理,并且此消费者服务实例随后失败,则此模式可确保将消息返回队列以供拾取并由另一个消费者服务。

1

给您不能更改客户端,我想代理呼叫。使用Azure中的API管理服务重新创建API,并将网址更改为指向API管理服务代理。

代理就可以轻松地委派到function application像亚拉文在评论你的问题中提到使用API Management Service policies.

+0

感谢您指向API管理服务和功能应用程序。到目前为止,我们没有太多的负担。看起来API管理服务会让事情复杂化并增加成本。所以,当webrole充当这些调用的代理时,队列中心工作模式看起来就足够了。 – Artyom

+1

不喜欢使用WebRole。这是ASM /经典Azure,所以你会写遗产。 Azure正在转向ARM /资源管理器。云服务成为AppService。另外,如果您可以运行Developer SKU,则可以以低于App Service的成本运行它。用API管理服务替换Web角色,并使用相同的队列中心工作模式。为API管理编写策略比为Web角色编写代码更简单。 (你只需要花几个小时来学习它)。无论您选择哪种方式,我都希望它顺利。 –