如何在MessageContext Axis2 + WSO2 ESB 4.8.1中将字符串队列名称设置为replyTo()

时间:2017-02-07 09:17:02

标签: wso2 rabbitmq wso2esb

我使用WSO2 ESB 4.8.1和RabbitMQ作为消息代理。如何使用生产者队列设置自定义的replyTo队列。我发现在axis2 messageContext中我们可以设置replyTo队列,但它期待EndpointReference。有没有办法设置字符串值?

2 个答案:

答案 0 :(得分:0)

如果WSO2 ESB是生产者并且您希望它设置JMSReplyTo标头,请在您的uri中定义名为“transport.jms.replyDestination”的参数。

使用ActiveMQ的示例(我允许您将其调整为RabbitMQ):

<send>
  <endpoint>
    <address uri="jms:/dynamicQueues/RequestQueueName?transport.jms.ConnectionFactory=myQueueConnectionFactory&amp;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 /)中定义为配置。

  • rabbitmq.replyto.name

您必须将回调队列作为此属性的值。

<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