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

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

【问题讨论】:

    标签: wso2 rabbitmq wso2esb


    【解决方案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属性。请建议。让我知道需要进一步澄清
      猜你喜欢
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      相关资源
      最近更新 更多