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

Posted

技术标签:

【中文标题】如何在 MessageContext Axis2 + WSO2 ESB 4.8.1 中将字符串队列名称设置为 replyTo()【英文标题】:How I can set string queue name to replyTo() in MessageContext Axis2 + WSO2 ESB 4.8.1 【发布时间】:2017-02-07 09:17:02 【问题描述】:

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

【问题讨论】:

【参考方案1】:

如果 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>

--> 你不能在 CacheLevel 中使用比“连接”更多的东西:它不适用于“会话”缓存级别

如果这不是您所需要的,您可以尝试修改在传输范围内定义此类属性的标头:

<property name="JMSReplyTo" scope="transport" value="ReplyQueueName"/>

【讨论】:

【参考方案2】:

当您要在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

【讨论】:

我尝试了提供的解决方案,但无法获得预期的结果。下面是详细的场景 - 我将拥有生产者队列 ex:“esb_sample_queue”,并且我想将 reply_to 附加为“reply_sample_queue”。当我在后端收到请求时,reply_to 以“回复队列:地址:w3.org/2005/08/addressing/none”的形式出现。有没有办法解决这个问题?让我知道以进一步澄清 有没有办法在messageContext中设置replyTo,比如MessageContext.setReplyTo(reply_sample_queu)?因为“axis2-transport-rabbitmq-amqp_1.1.0.wso2v9.jar”中的“RabbitMQMeesage.java”类使用MessageContext.getReply()方法来设置RABBITMQ_REPLY_TO属性。请建议。让我知道需要进一步澄清

以上是关于如何在 MessageContext Axis2 + WSO2 ESB 4.8.1 中将字符串队列名称设置为 replyTo()的主要内容,如果未能解决你的问题,请参考以下文章

如何在eclipse创建基于axis2的webservice服务端

如何在 Axis2 客户端中正确使用 WS-Addressing?

java如何通过eclipse安装axis2来调用webservice

Axis2如何限制一个Web服务

当内容类型为“text/xml”时,Axis2 发送多部分响应

Axis2的下载和安装