从 rabbitmq 队列获取答案时,从端点类型地址设置答案类型
Setting answer type from endpoint type address, when getting answer from rabbitmq queue
我有一个对 rabbitmq 队列的调用,它在 return 中以 json 负载响应。
<inSequence>
<call>
<endpoint>
<address statistics="enable" trace="enable" uri="rabbitmq:/AMQPProducerSample?rabbitmq.server.host.name=10.0.0.2&rabbitmq.server.port=5672&rabbitmq.server.virtual.host=dev&rabbitmq.server.vhost=devAuth&rabbitmq.queue.name=hello&rabbitmq.queue.durable=false&rabbitmq.queue.auto.ack=true&rabbitmq.queue.exclusive=false&rabbitmq.replyto.name=false">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>-1</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</address>
</endpoint>
</call>
<header name="Content-Type" scope="transport" value="application/json"/>
<respond description="respond whatever"/>
</inSequence>
但是当来自队列 return 的答案时,控制台显示:
[2020-10-19 19:20:39,741] 警告 {RabbitMQUtils} - 无法确定消息 urn:uuid:88BF095D7137B387921603153239744 设置为 text/plain[= 的内容类型11=]
并将“文本”添加到我已经 json 的负载中:
{"text":"{"jwt":"5f8e2d21c2184","error":false}"}
如何将 rabbitmq 的答案设置为 json 或者我是否需要转换该答案?因为它得到了所有条带保护。
请尝试以下Synapse神器。
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="RabbitMQRPCProxy"
startOnLoad="true"
trace="enable"
transports="http">
<description/>
<target>
<inSequence>
<log level="full">
<property name="received" value="true"/>
</log>
<call>
<endpoint>
<address uri="rabbitmq://?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.server.user.name=guest&rabbitmq.server.password=guest&rabbitmq.queue.name=rpc_queue&rabbitmq.queue.routing.key=rpc_queue&rabbitmq.replyto.name=dummy"/>
</endpoint>
</call>
<log level="full">
<property name="response" value="true"/>
</log>
<respond/>
</inSequence>
<outSequence/>
</target>
</proxy>
这里,
- 当 WSO2 Enterprise Integrator(WSO2 EI) 启动时,它会创建一个匿名的、独占的回调队列。
- 对于远程过程调用请求,WSO2 EI 发送具有以下属性的消息:
- reply_to : 这个设置到回调队列
- correlation_id :为每个请求设置一个唯一值。
- 然后将请求发送到 rpc_queue。
- RPC 服务器等待该队列上的请求。当请求出现时,它会完成工作并使用来自 reply_to 字段的具有相同 correlation_id.
的队列将带有结果的消息发送回 WSO2 EI 服务器
- WSO2 EI 等待 reply_to 队列中的数据。出现消息时,它会检查 correlation_id 属性。如果它与请求中的值匹配,它 returns 对应用程序的响应。
答案的类型由端点设置为消息的属性,如 de rabbitmq 文档所述:
https://www.rabbitmq.com/consumers.html#message-properties
在 php rabbitmq 库的情况下,将 'content_type'=>'application_json' 添加到 属性消息数组。
我有一个对 rabbitmq 队列的调用,它在 return 中以 json 负载响应。
<inSequence>
<call>
<endpoint>
<address statistics="enable" trace="enable" uri="rabbitmq:/AMQPProducerSample?rabbitmq.server.host.name=10.0.0.2&rabbitmq.server.port=5672&rabbitmq.server.virtual.host=dev&rabbitmq.server.vhost=devAuth&rabbitmq.queue.name=hello&rabbitmq.queue.durable=false&rabbitmq.queue.auto.ack=true&rabbitmq.queue.exclusive=false&rabbitmq.replyto.name=false">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>-1</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</address>
</endpoint>
</call>
<header name="Content-Type" scope="transport" value="application/json"/>
<respond description="respond whatever"/>
</inSequence>
但是当来自队列 return 的答案时,控制台显示: [2020-10-19 19:20:39,741] 警告 {RabbitMQUtils} - 无法确定消息 urn:uuid:88BF095D7137B387921603153239744 设置为 text/plain[= 的内容类型11=]
并将“文本”添加到我已经 json 的负载中: {"text":"{"jwt":"5f8e2d21c2184","error":false}"}
如何将 rabbitmq 的答案设置为 json 或者我是否需要转换该答案?因为它得到了所有条带保护。
请尝试以下Synapse神器。
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="RabbitMQRPCProxy"
startOnLoad="true"
trace="enable"
transports="http">
<description/>
<target>
<inSequence>
<log level="full">
<property name="received" value="true"/>
</log>
<call>
<endpoint>
<address uri="rabbitmq://?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.server.user.name=guest&rabbitmq.server.password=guest&rabbitmq.queue.name=rpc_queue&rabbitmq.queue.routing.key=rpc_queue&rabbitmq.replyto.name=dummy"/>
</endpoint>
</call>
<log level="full">
<property name="response" value="true"/>
</log>
<respond/>
</inSequence>
<outSequence/>
</target>
</proxy>
这里,
- 当 WSO2 Enterprise Integrator(WSO2 EI) 启动时,它会创建一个匿名的、独占的回调队列。
- 对于远程过程调用请求,WSO2 EI 发送具有以下属性的消息:
- reply_to : 这个设置到回调队列
- correlation_id :为每个请求设置一个唯一值。
- 然后将请求发送到 rpc_queue。
- RPC 服务器等待该队列上的请求。当请求出现时,它会完成工作并使用来自 reply_to 字段的具有相同 correlation_id. 的队列将带有结果的消息发送回 WSO2 EI 服务器
- WSO2 EI 等待 reply_to 队列中的数据。出现消息时,它会检查 correlation_id 属性。如果它与请求中的值匹配,它 returns 对应用程序的响应。
答案的类型由端点设置为消息的属性,如 de rabbitmq 文档所述: https://www.rabbitmq.com/consumers.html#message-properties 在 php rabbitmq 库的情况下,将 'content_type'=>'application_json' 添加到 属性消息数组。