MassTransit 仅发送消息正文
MassTransit Send Only Message Body
考虑使用 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 协同工作的系统?
感谢您的帮助!
-格雷格
如果需要,您可以切换到原始 JSON 序列化程序,只需更改总线配置即可:
services.AddMassTransit(x =>
{
x.UsingActiveMq((context, cfg) =>
{
cfg.Host("localhost", h =>
{
h.Username("admin");
h.Password("admin");
});
cfg.UseRawJsonSerializer();
});
});
services.AddMassTransitHostedService();
这将只发送消息,没有消息信封。
考虑使用 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 协同工作的系统?
感谢您的帮助! -格雷格
如果需要,您可以切换到原始 JSON 序列化程序,只需更改总线配置即可:
services.AddMassTransit(x =>
{
x.UsingActiveMq((context, cfg) =>
{
cfg.Host("localhost", h =>
{
h.Username("admin");
h.Password("admin");
});
cfg.UseRawJsonSerializer();
});
});
services.AddMassTransitHostedService();
这将只发送消息,没有消息信封。