WSO2 MI与RabbitMQ配置:如何仅接收原始JSON而非SOAP信封
解决WSO2 MI RabbitMQ消费原始JSON消息的配置调整
一、生产端(REST API + 发布序列)配置调整
确保发布到RabbitMQ Message Store的消息是原始JSON,不被封装为SOAP信封:
- 在发布序列中添加属性设置,强制消息类型为JSON并禁用SOAP包装:
<property name="MESSAGE_TYPE" value="application/json" scope="axis2"/> <property name="DISABLE_SOAP_ENVELOPE" value="true" scope="axis2"/>
- 若使用
storemediator存储消息,序列中不要添加多余的SOAP转换逻辑,直接传递原始请求体。
二、RabbitMQ Message Store配置调整
修改Message Store配置,使用SimpleMessageFormatter存储原始消息内容,避免自动封装SOAP:
<messageStore name="RabbitMQMessageStore" class="org.wso2.carbon.message.store.persistence.rabbitmq.RabbitMQMessageStore"> <parameter name="rabbitmq.server.host.name">localhost</parameter> <parameter name="rabbitmq.server.port">5672</parameter> <parameter name="rabbitmq.virtual.host">/</parameter> <parameter name="rabbitmq.username">guest</parameter> <parameter name="rabbitmq.password">guest</parameter> <parameter name="rabbitmq.queue.name">test-queue</parameter> <!-- 指定原始消息格式化器 --> <parameter name="messageFormatter">org.wso2.carbon.message.store.persistence.rabbitmq.formatters.SimpleMessageFormatter</parameter> </messageStore>
三、RabbitMQ Inbound Endpoint配置调整
调整入站端点,使其直接读取原始JSON消息,不解析为SOAP信封:
<inboundEndpoint name="RabbitMQInbound" onError="fault" protocol="rabbitmq" sequence="ConsumeSequence" suspend="false"> <parameters> <parameter name="rabbitmq.server.host.name">localhost</parameter> <parameter name="rabbitmq.server.port">5672</parameter> <parameter name="rabbitmq.virtual.host">/</parameter> <parameter name="rabbitmq.username">guest</parameter> <parameter name="rabbitmq.password">guest</parameter> <parameter name="rabbitmq.queue.name">test-queue</parameter> <!-- 启用原始消息处理器 --> <parameter name="messageProcessor">org.wso2.carbon.inbound.endpoint.protocol.rabbitmq.RawXmlMessageProcessor</parameter> <!-- 指定内容类型为JSON --> <parameter name="contentType">application/json</parameter> <!-- 禁用SOAP信封解析 --> <parameter name="disableSoapEnvelope">true</parameter> </parameters> </inboundEndpoint>
四、消费序列调整
消费序列可直接处理JSON payload,无需额外提取操作:
<sequence name="ConsumeSequence" trace="disable"> <log level="full"> <property name="Received JSON" expression="$body"/> </log> <!-- 后续业务逻辑 --> </sequence>
完成以上配置后,消费端就能直接收到原始的JSON消息{"publishId":"7ee7147d-a17b-44a0-b503-860f7b0139c9"},而非SOAP信封格式。
内容的提问来源于stack exchange,提问作者alxv
相关产品推荐
相关产品推荐

