You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python向ASP.NET Core MassTransit创建的RabbitMQ队列发消息异常

问题原因和解决方案

问题根源

两个报错分别对应以下两个配置错误:

  • _skipped队列生成:Python侧声明的exchange名称、类型不符合MassTransit的默认拓扑规则,发送的消息无法匹配到已注册的消费者,被MassTransit判定为无效消息转发到skipped队列。
  • _error队列生成:发送的消息结构不符合MassTransit默认的信封格式要求,同时messageType的URN值和实际消费的消息类不匹配,导致反序列化失败。

推荐方案(改动最少,兼容性最高)

直接修改C#端MassTransit配置,启用原生JSON序列化支持,无需适配MassTransit专属的信封格式,适合跨语言对接场景。

第一步:修改C# ReceiveEndpoint配置

config.ReceiveEndpoint("mappingQueue", e =>
{
    e.ConfigureConsumeTopology = false; // 关闭默认拓扑绑定,避免生成冗余exchange
    e.UseRawJsonSerializer(); // 启用原生JSON序列化,直接反序列化消息体为目标类
    e.ConfigureConsumer<MappingUpdateConsumer>(provider);                        
});

第二步:修改Python发布代码

无需自定义exchange,直接通过RabbitMQ默认交换机发消息到目标队列即可:

import pika
import json

# 替换为你实际的RabbitMQ连接配置
connection = pika.BlockingConnection(pika.ConnectionParameters(
    host='localhost',
    port=5672,
    credentials=pika.PlainCredentials('你的RabbitMQ用户名', '你的RabbitMQ密码')
))
channel = connection.channel()

# 声明队列,durable参数要和MassTransit创建的队列属性一致(默认持久化)
channel.queue_declare(queue='mappingQueue', durable=True)

# 消息结构直接对应C# MappingUpdateMessage类,属性名大小写匹配
message = {
    "Message": "Hello World"
}

channel.basic_publish(
    exchange='', # 用RabbitMQ默认交换机
    routing_key='mappingQueue', # 路由键直接填队列名
    body=json.dumps(message),
    properties=pika.BasicProperties(
        delivery_mode=2, # 消息持久化,和MassTransit默认配置对齐
        content_type='application/json' # 必须指定内容类型为JSON
    )
)

connection.close()
print("sent")

可选方案(不改C#代码,适配原生MassTransit格式)

如果你不想修改C#侧配置,可以严格遵循MassTransit的规则调整Python代码:

  1. 先确认MappingUpdateMessage类的完整命名空间,比如你的类放在MyProject.Messages命名空间下,那对应的消息exchange名是urn:message:MyProject.Messages:MappingUpdateMessage,这才是MassTransit自动创建的消息exchange,不是你代码里的mappingQueue。
  2. 消息信封结构、messageType的URN必须和消息类完全匹配,同时补充必填的消息头字段。

注意事项

  • 如果需要Python侧使用小写属性名,可以在C#的MappingUpdateMessage属性上添加[JsonPropertyName("message")]特性(引用System.Text.Json.Serialization命名空间)做属性名映射。
  • 所有RabbitMQ的连接配置、持久化配置要和你现有微服务的配置保持一致。

内容的提问来源于stack exchange,提问作者Justin Hehli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:24:03