我有一个Flex应用程序,向候选人显示评估。在评估结束时,asp.NET应用程序将(候选)id的会话发送到队列。另一台机器上的Windows服务处理队列并执行一些作业。
现在,如果由于某种原因msmq关闭,那么会话ID将不会被发送到队列并且将抛出异常。我可以抓住它,但该怎么办呢?
!Msmq不用于Flex的服务请求,因此即使msmq关闭,应用程序也会继续运行。
答案 0 :(得分:1)
这真的是一个商业决策,所以YMMV。我倾向于提倡这种方法:
1)记录所有必要的内容(如果可能,包括消息体),以便稍后重新提交消息。然而,存储。我会继续使它成为一个异常数据库,这样你也可以记录失败的时间,确切的异常(如果问题是MSMQ已关闭,但其他东西爆炸了)等。
2)拥有某种通知系统,该系统将通知所有相关方(业务流程所有者,支持以及MSMQ负责人)的故障以及足够的识别信息,以便在异常数据库中查找记录的消息。
答案 1 :(得分:1)
将所有会话ID存储在数据库的表中,并让另一台计算机上的Windows服务读取此表中的ID(完全绕过消息队列)。
答案 2 :(得分:1)
因此Flex在网页上托管在客户端上?因此,它是否正在与服务器进行通信,而服务器又将消息发布到队列中。或者直接使用HTTP灵活地发布到q。如果它是后者(flex直接与q通信)那么如果q关闭则你可以做很多事情。
如果flex正在与与q通信的服务器通话,那么你有几个选择。你可以完全按照你说的做,但是你需要一个单独的进程来读取离线数据存储并在q出现后处理消息的发布。如果q托管在服务的另一台服务器上,你可以设置一个本地q(应该始终可用,然后将它复制到remove q当它可用时(因此msmq技术处理网络停机时间,等)。
或者你可以按照'@MusiGenesis'的答案完全绕过队列,如果它实际上不需要的话。