Hi, i had simple jms client inside esb:
connection = ActiveMQConnection.makeConnection(ACTIVEMQURL);
connection.start();
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination requestdestination =
session.createQueue(INQUEUE);
javax.jms.MessageProducer producer =
session.createProducer(requestdestination);
Destination responseDestination =
session.createQueue(OUTQUEUE);
javax.jms.MessageConsumer consumer =
session.createConsumer(responseDestination);
TextMessage requestMessage =
session.createTextMessage();
requestMessage.setText(requestXml);
producer.send(requestMessage);
TextMessage responseMessage = (TextMessage)
consumer.receive();
results = responseMessage.getText();
and this was working, but not efficient. I change this to JmsTemplate
configured in spring but now i receive inproperly correlated messages
(responses for different requests). Please find what is wrong in code:
<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<!-- lets wrap in a pool to avoid creating a connection
per send -->
<bean
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory"
ref="jmsFactory" />
</bean>
</property>
<property name="receiveTimeout" value="15000"/>
</bean>
<bean id="messageProducer"
class="de.comvel.booking.jms.client.MessageProducer">
<property name="template" ref="jmsTemplate" />
<property name="destination" value="inClientQueue" />
</bean>
<bean id="messageConsumer"
class="de.comvel.booking.jms.client.MessageConsumer">
<property name="template" ref="jmsTemplate" />
<property name="destination" value="outClientQueue" />
</bean>
Best regards,
Tomasz Prus