2017-02-07 2 views
0

Я использую WSO2 ESB 4.8.1 и RabbitMQ в качестве брокера сообщений. Как настроить настроенную очередь replyTo в очереди производителей. Я обнаружил, что в axis2 messageContext мы можем установить очередь ответа, но он ожидает EndpointReference. Есть ли способ установить строковое значение?Как я могу задать имя очереди строк для replyTo() в MessageContext Axis2 + WSO2 ESB 4.8.1

ответ

0

Если WSO2 ESB является производителем, и вы хотите, чтобы он установил заголовок JMSReplyTo, определите параметр «transport.jms.replyDestination» в вашем uri.

образца с ActiveMQ (я позволю вам адаптировать его к RabbitMQ):

<send> 
    <endpoint> 
    <address uri="jms:/dynamicQueues/RequestQueueName?transport.jms.ConnectionFactory=myQueueConnectionFactory&amp;transport.jms.ReplyDestination=ReplyQueueName/> 
    </endpoint> 
</send> 

Определение "myQueueConnectionFactory" в хранилище/CONF/axis2/axis2.xml, внутри 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"/> 
0

Когда вы собираетесь добавить REPLYTO в RabbitMQ, необходимо указать обратного вызова очереди, как вы ожидаете ответа. Это можно определить в WSO2 ESB axis2.xml ($ ESB_HOME/репозиторий/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

+0

Я попытался с решением при условии, но не может получить ожидаемый результат. Ниже приведен подробный сценарий - у меня будет очередь производителей ex: «esb_sample_queue», и с этим я хочу добавить reply_to как «reply_sample_queue». Когда я получил запрос в back-end reply_to, он появится как «Reply to Queue: Address: http://www.w3.org/2005/08/addressing/none». Есть ли способы решить это? Дайте мне знать для дальнейших разъяснений –

+0

Есть ли способ установить ответ в MessageContext like - MessageContext.setReplyTo (reply_sample_queu)? Поскольку класс «RabbitMQMeesage.java» в «axis2-transport-rabbitmq-amqp_1.1.0.wso2v9.jar» использует метод MessageContext.getReply() для установки свойства RABBITMQ_REPLY_TO. Пожалуйста, предложите. Дайте мне знать для дальнейшего уточнения –

Смежные вопросы