如何在 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&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