.net core 大众运输公司。编辑MessageType属性以删除不必要的项

.net core 大众运输公司。编辑MessageType属性以删除不必要的项,.net-core,microservices,azureservicebus,masstransit,.net Core,Microservices,Azureservicebus,Masstransit,首先,请原谅我的英语很差。我正在使用MassTransit和Azure服务总线进行微服务之间的异步通信 由于项目设计要求,在masstransit中发送和/或发布的对象是实现接口并具有继承性的对象(类实例),这意味着“MessageType”属性是多个值的数组,这导致发送/发布“副本”对象的每个基类和接口的对象 由于应用程序实际上只需要处理最后一个类,因此此行为的结果是创建了从未处理过的消息类型的队列和主题 有没有办法修改MessageType数组以删除所有不必要的项 例如: 这是一条最新消息:

首先,请原谅我的英语很差。我正在使用MassTransit和Azure服务总线进行微服务之间的异步通信

由于项目设计要求,在masstransit中发送和/或发布的对象是实现接口并具有继承性的对象(类实例),这意味着“MessageType”属性是多个值的数组,这导致发送/发布“副本”对象的每个基类和接口的对象

由于应用程序实际上只需要处理最后一个类,因此此行为的结果是创建了从未处理过的消息类型的队列和主题

有没有办法修改MessageType数组以删除所有不必要的项

例如:

这是一条最新消息:

{
  "messageId": "c93e0000-eab0-3663-c954-08d89e1f87cb",
  "correlationId": "42fc2237-77b1-4994-821d-87790b6caf06",
  "conversationId": "c93e0000-eab0-3663-f342-08d89e1f87cd",
  "sourceAddress": "sb://bus.servicebus.windows.net/tmspayments7dc9d65778jfh75_dotnet_bus_3r9yyy8ksy5g84tdbdcjasmhg9",
  "destinationAddress": "sb://bus.servicebus.windows.net/queue",
  "messageType": [
    "urn:message:Payments.Application.Integration.Outcoming.Commands.Sales:NotifySalePaymentHasCanceledCommand",
    "urn:message:Payments.Application.Integration.Outcoming.Commands:BaseIntegrationOutcomingCommand",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Commands:IdentifiedCommandBase",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Messages:MessageBase",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Messages:IIdentifiedMessage",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Messages:IMessage",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Commands:IIdentifiedCommand",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Messages:ICommand",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Commands.Outcoming:IOutcomingCommand",
    "urn:message:Tms.Frameworks.CqrsEs.Cqrs.Messages:IOutcomingMessage"
  ],
  "message": {
    "commandId": "42fc2237-77b1-4994-821d-87790b6caf06",
    "terminalId": 71,
    "paymentId": "a28a23e9-3ba5-464f-9a20-d25d1991ab46"
  },
  "sentTime": "2020-12-11T21:55:53.252599Z",
  "headers": {},
  "host": {
    "machineName": "tms-payments-7dc9d65778-jfh75",
    "processName": "dotnet",
    "processId": 1,
    "assembly": "Payments.Api",
    "assemblyVersion": "1.0.0.0",
    "frameworkVersion": "3.1.8",
    "massTransitVersion": "5.5.2.0",
    "operatingSystemVersion": "Unix 4.15.0.1098"
  }
}
这是我的目标消息(messageType属性中只有一项):

多谢各位

问候

Borja

简短回答:没有

MassTransit将反映所有支持的类型,并将它们包含在消息信封中,以支持多态消息传递和反序列化


您可以避免在message broker上被创建为Exchange/主题,但这不会在序列化期间将它们从消息类型数组中排除。

谢谢您的回答!还有一些问题:-此属性是否可继承?如果指向实现接口“B”的类“a”,并且它实现接口“C”,则如果我将属性放在接口“C”上,则接口“B”被排除在外?-如果属性放在以后发布/发送的类“a”中,是否仍会创建类“a”的主题?非常感谢你抽出时间,克里斯!无论如何,它不是继承的。这将使它实际上毫无用处,因为它将排除整个类型层次结构,而不仅仅是特定类型。
{
  "messageId": "c93e0000-eab0-3663-c954-08d89e1f87cb",
  "correlationId": "42fc2237-77b1-4994-821d-87790b6caf06",
  "conversationId": "c93e0000-eab0-3663-f342-08d89e1f87cd",
  "sourceAddress": "sb://bus.servicebus.windows.net/tmspayments7dc9d65778jfh75_dotnet_bus_3r9yyy8ksy5g84tdbdcjasmhg9",
  "destinationAddress": "sb://bus.servicebus.windows.net/queue",
  "messageType": [
    "urn:message:Payments.Application.Integration.Outcoming.Commands.Sales:NotifySalePaymentHasCanceledCommand"
  ],
  "message": {
    "commandId": "42fc2237-77b1-4994-821d-87790b6caf06",
    "terminalId": 71,
    "paymentId": "a28a23e9-3ba5-464f-9a20-d25d1991ab46"
  },
  "sentTime": "2020-12-11T21:55:53.252599Z",
  "headers": {},
  "host": {
    "machineName": "tms-payments-7dc9d65778-jfh75",
    "processName": "dotnet",
    "processId": 1,
    "assembly": "Payments.Api",
    "assemblyVersion": "1.0.0.0",
    "frameworkVersion": "3.1.8",
    "massTransitVersion": "5.5.2.0",
    "operatingSystemVersion": "Unix 4.15.0.1098"
  }
}