c# - 带有 C# 和 SQL Server 的 Amazon SQS

标签 c# sql-server amazon-web-services amazon-s3 amazon-sqs

我被要求在我们的新系统中使用 Amazon SQS。我们的业务取决于客户向我们的支持代理发送一些任务/请求,一旦客户提交了他的任务/请求,它就应该在我的 SQL Server 数据库中排队,所有排队的任务都应该分配给不忙的代理因为流程说代理可以同时处理或处理一个任务/请求,所以,如果我有 10 个任务/请求来到我的系统,所有都应该排队,然后,系统应该将任务转发给代理现在是空闲的,一旦 agent 解决了任务,他应该得到下一个任务,否则,系统应该等待任何 agent 直到完成他当前的任务来分配一个新任务,当然,不应该有任何重复在任务/请求处理......等等。

现在我需要什么?

  • 我是第一次使用排队服务,简单的引用一下就可以搞清楚什么是Amazon SQS?

  • 如何将其用于 C# 和 SQL Server?我读过this topic但我仍然觉得有些东西乱七八糟,因为我无法开始。我只是针对我可以在运行时处理任务并将其分配给代理,然后关闭它并获得一个新代理的方式,正如我上面所解释的那样。

最佳答案

要求我们根据一段散文来设计一个系统是一项非常艰巨的任务。
SQS 简单来说就是一个云队列系统。根据您的描述,我不确定它会使您的系统变得更好。

首先,您已经将所有内容存储在数据库中,那么为什么还需要将内容存储在队列中呢?如果您想在数据库中存储内容时使用队列语义,您可以考虑支持 SQL 中的队列的 SQL Server Service Broker ( https://technet.microsoft.com/en-us/library/ms345108(v=sql.90).aspx#sqlsvcbr_topic2 )。或者,除非您的规模非常大(可能超过 100 个任务/秒),否则您可以只查询表以查找需要提取的任务。

其次,听起来您可能有一个围绕任务的工作流,它可以扩展到不仅仅是一个队列来让代理人接他们。例如,您是否对任务进行了任何跟进(通过电子邮件向客户询问他们的服务如何,将任务搁置直到客户回复您等)?如果是这样,您可能需要查看简单工作流服务 (https://aws.amazon.com/swf/),或者由于您已经在 Microsoft 的堆栈中,您可以查看 Windows 工作流 (https://msdn.microsoft.com/en-us/library/ee342461.aspx)

顺便说一句,默认情况下,SQS 不保证“仅一次”传送,因此如果重复对您来说是个大问题,那么您要么必须自己进行重复数据删除,要么使用支持重复数据删除的 FIFO 队列 (http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html),但是限制为每秒 300 个事务(又名:标准发送 -> 接收 -> 删除 API 大约每秒 100 条消息。使用批处理显然这个数字可能更高,但考虑到你的用例,它听起来不像你无需大量工作就可以使用批处理。

关于c# - 带有 C# 和 SQL Server 的 Amazon SQS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45052898/

相关文章:

sql-server - 有什么办法可以避免子查询吗?

javascript - 通过javascript连接数据库时为"login failed for user"

Python:如何在 python 使用日志记录模块中创建和使用自定义记录器?

c# - Winforms MVVM GridView 数据绑定(bind)

c# - Entity Framework 错误关键字不支持 : provider\r\nconnection string

c# - Orchard 。如何渲染 'HeadScripts' 形状之前的东西?

amazon-web-services - AWS 云信息 : Attaching volume and mounting filesystem

mysql - 无法连接亚马逊MYSQL

c# - .NET 4.0 中的代码契约,非空引用类型的粉丝们不高兴吗?

c# - 当我们在 Xamarin.Forms Android 应用程序中将目标 API 版本更改为 26 时无法读取/写入文件