MassTransit 仅发送消息正文

问题描述 投票:0回答:2

考虑使用 MassTransit 来替换我公司正在使用的一些旧的、脆弱的 ActiveMQ 库。目前我们发送到 AMQ 的消息基本上只是对象

{
    "clientId": 1,
    "accountid": 333,
    "filePath": "C:\Test.csv",
    "updateDate": "2021-11-08T23:37:39.2915758Z"
}

当我通过 MassTransit 发送消息时,它会在消息中添加大量其他信息......

{
  "messageId": "00010000-4100-0250-5531-08d9a310c15e",
  "conversationId": "00010000-4100-0250-577a-08d9a310c15e",
  "sourceAddress": "activemq://localhost:61616/WINDOWZZZ123_MyCompanyStreamService_bus_yyyoyynbyybfynjjbdc4grfire?temporary=true",
  "destinationAddress": "activemq://localhost:61616/MessageQueue_Testing",
  "messageType": [
    "urn:message:MyCompany.Services.QueueContracts:MessageQueueItem",
    "urn:message:MyCompany.Services.QueueContracts:IQueueItem"
  ],
  "message": {
    "clientId": 1,
    "accountId": 333,
    "filePath": "C:\Test.csv",
    "updateDate": "2021-11-08T23:37:39.2915758Z"
  },
  "sentTime": "2021-11-08T23:37:40.8624945Z",
  "headers": {
    "MT-Activity-Id": "00-b8b6cf020495eb44b57c8eff14244671-937ecff1f3901d41-01"
  },
  "host": {
    "machineName": "WINDOWZZZ123",
    "processName": "MyCompany.StreamService",
    "processId": 25692,
    "assembly": "MyCompany.StreamService",
    "assemblyVersion": "1.0.0.0",
    "frameworkVersion": "5.0.11",
    "massTransitVersion": "7.2.4.0",
    "operatingSystemVersion": "Microsoft Windows NT 10.0.19043.0"
  }
}

虽然我看到了拥有所有这些元数据的价值,但它会破坏我们所有的遗留服务,而且目前工作量太大。

我正在像这样设置 MassTransit... Startup.cs 配置服务()

services.AddMassTransit(x =>
{
    x.UsingActiveMq((context, cfg) =>
    {
        cfg.Host("localhost", h =>
        {
            h.Username("admin");
            h.Password("admin");
        });
    });
});
services.AddMassTransitHostedService();

我正在这样发送消息......

var endpoint = await _sendEndpointProvider.GetSendEndpoint(new Uri("queue:myQueue"));
var item = new MessageQueueItem();
await endpoint.Send<MessageQueueItem>(item);

从文档来看,MassTransit 似乎并不是真正针对此用例构建的,而是更适合构建使用 MT 协同工作的系统?

感谢您的帮助! -格雷格

c# masstransit
2个回答
2
投票

如果需要,您可以切换到原始 JSON 序列化器,只需更改总线配置即可:

services.AddMassTransit(x =>
{
    x.UsingActiveMq((context, cfg) =>
    {
        cfg.Host("localhost", h =>
        {
            h.Username("admin");
            h.Password("admin");
        });

        cfg.UseRawJsonSerializer();
    });
});
services.AddMassTransitHostedService();

这将只发送消息,而不发送消息信封。


0
投票

是否可以仅为特定消息类型配置原始 json 序列化?

亲切的问候 丹

© www.soinside.com 2019 - 2024. All rights reserved.