首页 > 解决方案 > MassTransit 实体框架审计存储 SentTime 不可用

问题描述

我已经使用实体框架存储和 SQL Server 设置了对 MassTransit 消息的审核。默认情况下,审计记录表具有以下架构:

CREATE TABLE [dbo].[EfCoreAudit](
    [AuditRecordId] [int] IDENTITY(1,1) NOT NULL,
    [MessageId] [uniqueidentifier] NULL,
    [ConversationId] [uniqueidentifier] NULL,
    [CorrelationId] [uniqueidentifier] NULL,
    [InitiatorId] [uniqueidentifier] NULL,
    [RequestId] [uniqueidentifier] NULL,
    [SourceAddress] [nvarchar](max) NULL,
    [DestinationAddress] [nvarchar](max) NULL,
    [ResponseAddress] [nvarchar](max) NULL,
    [FaultAddress] [nvarchar](max) NULL,
    [InputAddress] [nvarchar](max) NULL,
    [ContextType] [nvarchar](max) NULL,
    [MessageType] [nvarchar](max) NULL,
    [Custom] [nvarchar](max) NULL,
    [Headers] [nvarchar](max) NULL,
    [Message] [nvarchar](max) NULL,
 CONSTRAINT [PK_EfCoreAudit] 
 PRIMARY KEY CLUSTERED ([AuditRecordId] ASC)
)

其中不包括 SentTime 列。我没有将该属性添加到所有应用程序消息类型以使其包含在消息列数据中,而是寻找更通用的解决方案。

一种选择是在消息头中添加该信息,另一种选择是在 MessageAuditMetadata.Custom 字典中添加 KeyValuePair。但在我看来,SentTime 信息应该默认存在。

没有 SentTime 列有什么原因吗?

我查看了 MassTransit 代码,发现 SendContext 和 PublishContext 接口没有该属性,而 MessageContext(以及因此的 ConsumeContext)有。

是否有任何其他替代方法可以将该信息添加到比上述更推荐的审计记录中?

标签: entity-frameworkauditmasstransit

解决方案


推荐阅读