我使用WSO2 ESB 4.8.1和RabbitMQ作为消息代理。如何使用生产者队列设置自定义的replyTo队列。我发现在axis2 messageContext中我们可以设置replyTo队列,但它期待EndpointReference。有没有办法设置字符串值?
答案 0 :(得分:0)
如果WSO2 ESB是生产者并且您希望它设置JMSReplyTo标头,请在您的uri中定义名为“transport.jms.replyDestination”的参数。
使用ActiveMQ的示例(我允许您将其调整为RabbitMQ):
<send>
<endpoint>
<address uri="jms:/dynamicQueues/RequestQueueName?transport.jms.ConnectionFactory=myQueueConnectionFactory&transport.jms.ReplyDestination=ReplyQueueName/>
</endpoint>
</send>
在repository / conf / axis2 / axis2.xml中定义“myQueueConnectionFactory”,在jms transportSender定义中:
<parameter name="myQueueConnectionFactory" locked="false">
<parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url" locked="false">failover:(tcp://localhost:61616)?jms.useCompression=true</parameter>
<parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
<parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
<parameter name="transport.jms.CacheLevel" locked="false">connection</parameter>
</parameter>
- &GT;你不会在CacheLevel中使用多于“连接”的东西:它不能用于“会话”缓存级别
如果这不是您所需要的,您可以尝试修改在传输范围内定义此类属性的标头:
<property name="JMSReplyTo" scope="transport" value="ReplyQueueName"/>
答案 1 :(得分:0)
当您要在rabbitmq中添加replyTo时,您可以按预期的响应指定回调队列。这可以在WSO2 ESB axis2.xml($ ESB_HOME / repository / conf / axis2 /)中定义为配置。
您必须将回调队列作为此属性的值。
<parameter name="rabbitmq.replyto.name" locked="false">testqueue</parameter>
你要求设置字符串值。由于您希望添加字符串值,这有点令人困惑。根据amqp协议,此属性定义了回调队列,它期望端点引用作为结果[1,2]。
希望这能解决您的问题,如果您需要更多说明,请发表评论。
[1] https://www.rabbitmq.com/direct-reply-to.html [2] https://www.rabbitmq.com/tutorials/tutorial-six-python.html