Amigos, estou precisando fazer uma aplicação minha utilizar JMS…
O basico com um receiver eu ja consegui… porem eu preciso ter mais de um receiver e cada um “escutando” uma determinada fila… alguem pode me ajudar??
segue o que eu fiz para um receiver apenas
<amq:broker useJmx="false" persistent="false">
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:0" />
</amq:transportConnectors>
</amq:broker>
<bean id="defaultQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="defaultQueue"/>
</bean>
<bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost"/>
</bean>
<bean id="listenerContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="defaultQueue"/>
<property name="messageListener">
<bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<property name="delegate">
<bean class="br.com.dnasolution.integrabrasil.ws.jms.MessageListenerImpl"/>
</property>
</bean>
</property>
</bean>
<!-- This one is to send test messages -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="defaultQueue"/>
</bean>
Receiver[code]
@Component
public class MessageListenerImpl implements MessageListener{
@Override
public void onMessage(Message message) {
System.out.println("RECEIVER");
TextMessage msg = (TextMessage) message;
Calendar dataEntradaComparar = Calendar.getInstance();
dataEntradaComparar.add(Calendar.MINUTE, 1);
while(Calendar.getInstance().getTimeInMillis() < dataEntradaComparar.getTimeInMillis()){
}
try
{
System.out.println("MESSAGE: " + msg.getText());
}
catch (JMSException e)
{
e.printStackTrace();
}
}
}[/code]
e o sender[code]
@Component
public class MessageProducer
{
@Autowired
private JmsTemplate jmsTemplate;
private String mensagem;
public void sendMessages(String msg) throws JMSException
{
mensagem = msg;
System.out.println(“PRODUCER”);
MessageCreator messageCreator = new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
TextMessage message = session.createTextMessage(mensagem);
return message;
}
};
jmsTemplate.send(messageCreator);
}
}
[/code]
Estou usando Spring + Tomcat + activeMq
obrigado
Acho que isso pode te ajudar:
[code]<?xml version="1.0" encoding="UTF-8"?>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="pooledConnectionFactory" />
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${URL_ACTIVEMQ}" />
</bean>
<jms:listener-container
connection-factory="pooledConnectionFactory"
concurrency="10-20"
prefetch="1"
acknowledge="auto">
<jms:listener destination="fila1" ref="fila1MessageListener" />
<jms:listener destination="fila2" ref="fila2MessageListener" />
</jms:listener-container>
[/code]
fila1MessageListener e fila2MessageListener devem implementar javax.jms.MessageListener
nesta configuracao vc consegue configurar listeners para varios destinations e consegue determinar a quantidade de consumidores para as filas
espero ter ajudado
abs
PS: Também uso Spring + Tomcat + activeMQ
showwww. agora para finalizar… eu posso enviar mais de um dado? por exemplo uma String e um List ??
valeu
Para conseguir enviar mais uma informacao vc deve usar mapmessage ou objectmessage, eu prefiro mapmessage
Entao eu estou fazendo isso:
[code] MessageCreator messageCreator = new MessageCreator()
{
public MapMessage createMessage(Session session) throws JMSException
{
List listaFirmas = new ArrayList();
TbIndiceNtFirmasWS indice1 = new TbIndiceNtFirmasWS();
indice1.setCdCartorioCnj(“11.021-3”);
indice1.setCdComunicadoInformarCartorio(1);
indice1.setCdFicha(2);
indice1.setDtAberturaFirma(“10/10/20140”);
indice1.setDtApontamentoIndice(“11/11/2011”);
indice1.setDtAto(“03/09/2009”);
indice1.setDtAtualizacaoIndice(“08/08/2008”);
indice1.setDtExportacaoLote(“07/07/2007”);
indice1.setNmParte(“Fabio”);
indice1.setNmQualificacaoParte(“Qualificacao”);
indice1.setNrCartaoAssinatura(“aaaa”);
indice1.setNrDocumentoParte(“documento”);
indice1.setNrPapelSeguranca(“asasd”);
indice1.setNrSelo(“selo”);
indice1.setSgSexoParte(“M”);
indice1.setTpDocumentoParte(“Tipo”);
listaFirmas.add(indice1);
MapMessage m = session.createMapMessage();
m.setString("nrCartorioCnj", "nrCartorioCnj");
m.setObject("listaFirmas", listaFirmas);
//TextMessage message = session.createTextMessage("ae");
return m;
}
};
jmsTemplate.send(messageCreator);[/code]
porem recebo o seguinte erro:
[quote]Exception in thread “main” javax.xml.ws.soap.SOAPFaultException: java.io.IOException: Object is not a primitive: br.com.dnasolution.integrabrasil.util.ws.TbIndiceNtFirmasWS@31b95f
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy30.addIndiceNtFirmas(Unknown Source)
at testefirmas.Main.main(Main.java:64)[/quote]
Outra coisa… como eu falo para qual lista eu quyero mandar???
jmsTemplate.send(“fila1”, msg)?