我试图为排队的消息传递系统实现会话上下文数据。异步(排队)消息传递和关联的会话数据
会话处理过程如下: 前端应用程序对自身进行身份验证并接收会话标识。 之后,会话标识被包括在消息标题中,所以消息处理程序被提供有用于例如安全检查和审计日志记录。如果客户崩溃并继续工作,客户可能会选择一个会话。
所以现在我们要将键/值对与会话ID关联起来。但是,如果会话数据发生变化,会产生许多并发问题,因为消息处理程序使用的会话数据应该是发送消息时的数据。
我看到了两个可能的解决方案:
- 将相关的会话数据,每一个消息头
- 商店版本数据库的会话数据,并在邮件标题中使用的版本号。
第一个使消息更大,第二个使会话数据库更大并创建大量的基础结构代码。我必须将最新的值保存到数据库中,所以如果客户端崩溃或连接丢失,客户端可能会继续工作。
还有其他解决方案吗?我倾向于使用第一种解决方案,但希望首先获得一些反馈。
其他人如何处理这个问题(例如JMS/NServiceBus/Masstransit)?
根据答案更新: 我选择了说服我的团队成员仅在前端使用会话数据并将其放入消息中(如果消息处理程序需要)。
你对消息架构是正确的。会话数据应该保留在前端并且仅存储用于恢复。将相关业务数据放在标题或外部会话数据库中是错误的。 – sanosdole 2011-12-16 16:20:18