Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误后恢复资源_C#_Dependency Injection_Structuremap - Fatal编程技术网

C# 错误后恢复资源

C# 错误后恢复资源,c#,dependency-injection,structuremap,C#,Dependency Injection,Structuremap,我目前正在构建一个应用程序,它通过一个基本的web服务接收数千条小消息,这些消息被发布到消息队列RabbitMQ。该应用程序使用依赖注入,使用StructureMap作为其容器 我有一个单独的工作应用程序,它使用消息队列并将消息持久化到数据库SQL Server 我已经将SQL连接和RabbitMQ连接实现为单线程本地 在理想情况下,这一切都可以正常工作,但如果SQL Server或RabbitMQ连接断开,我需要重新打开它,或者可能会处理并重新创建/重新连接资源 我编写了一个基本类作为工厂,在

我目前正在构建一个应用程序,它通过一个基本的web服务接收数千条小消息,这些消息被发布到消息队列RabbitMQ。该应用程序使用依赖注入,使用StructureMap作为其容器

我有一个单独的工作应用程序,它使用消息队列并将消息持久化到数据库SQL Server

我已经将SQL连接和RabbitMQ连接实现为单线程本地

在理想情况下,这一切都可以正常工作,但如果SQL Server或RabbitMQ连接断开,我需要重新打开它,或者可能会处理并重新创建/重新连接资源

我编写了一个基本类作为工厂,在它返回资源之前,检查它是否连接/打开/工作,如果没有,则处理它并重新创建它-我不确定这是最佳做法还是我正在尝试解决一个已经解决的问题

有没有人能建议我如何实现长时间运行的任务,在我的例子中,这些任务会执行很多小任务—一条INSERT语句,它不需要为每个任务实例化对象,但可以从错误(如断开的连接)中正常恢复

RabbitMQ连接似乎很昂贵,在高工作负载期间,我可能会很快用完句柄,因此我希望每个线程重复使用相同的连接。

包含用于瞬时故障处理的块。它允许您在出现错误时指定重试行为


它的设计考虑到了Windows Azure,但我相信根据它提供的内容编写自定义策略会很容易。

您可以为RabbitMQ创建一个具有连接池的连接工厂。它将负责分发与任务的连接。您应该检查连接是否正常。如果没有,则启动一个新线程关闭/清理连接,然后将其返回到线程池。同时,将正常工作的连接返回给用户

这听起来很复杂,但这是处理难以初始化的资源的模式