Messagerie JMS mise en œuvre

J'ai eu du mal avec ce "simple" tâche pour plus d'expirienced les gens, je suis bloquée depuis 2 jours maintenant besoin d'aide. J'ai changé les choses arround comme zillion de fois maintenant, enfin, je suis tombé sur ce printemps JMS tutoriel.

Ce que je veux faire, Envoyer un message et de le recevoir. J'ai été aussi la lecture de ce livre le chapitre 8 sur la messagerie. Il a vraiment bien explique 2 type de messagerie, et il y a bel exemple de l' publish-and-subscribe type mais maintenant exemple pour point-to-point de messagerie( c'est celui que j'ai besoin).

Je suis en mesure d'envoyer un message à la file d'attente sur mon propre, mais n'ont pas la moindre idée de comment recevoir c'est pourquoi j'ai essayé avec ce printemps tutoriel voici ce que j'ai obtenu jusqu'à présent :

RÉ-ÉDITÉ EXPÉDITEUR :

package quartz.spring.com.example; 
import java.util.HashMap; 
import java.util.Map; 
import javax.jms.ConnectionFactory; 
import javax.jms.Destination; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.Queue; 
import javax.jms.Session; 
import org.springframework.jms.core.MessageCreator; 
import org.springframework.jms.core.JmsTemplate; 
import org.springframework.jms.core.JmsTemplate102; 
import org.springframework.jms.core.MessagePostProcessor; 
public class JmsQueueSender { 
private JmsTemplate jmsTemplate; 
private Destination destination; 
public void setConnectionFactory(ConnectionFactory cf) { 
this.jmsTemplate = new JmsTemplate102(cf, false); 
} 
public void setQueue(Queue queue) { 
this.destination = queue; 
} 
public void simpleSend() { 
this.jmsTemplate.send(this.destination, new MessageCreator() { 
public Message createMessage(Session session) throws JMSException { 
return session.createTextMessage("hello queue world"); 
} 
}); 
} 
public void sendWithConversion() { 
Map map = new HashMap(); 
map.put("Name", "Mark"); 
map.put("Age", new Integer(47)); 
jmsTemplate.convertAndSend("ReceiverQueue", map, new MessagePostProcessor() { 
public Message postProcessMessage(Message message) throws JMSException { 
message.setIntProperty("AccountID", 1234); 
message.setJMSCorrelationID("123-00001"); 
return message; 
} 
}); 
} 
} 

RÉCEPTEUR :

package quartz.spring.com.example;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class ExampleListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}

ré-édité applicationcontext.xml

      <?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> 
<bean id="sender" class="quartz.spring.com.example.JmsQueueSender" 
init-method="sendWithConversion" /> 
<bean id="receiver" class="quartz.spring.com.example.ExampleListener"> 
</bean>  
<bean id="jmsContainer" 
class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
<property name="connectionFactory" ref="connectionFactory" /> 
<property name="destination" ref="queueDestination" /> 
<property name="messageListener" ref="messageListener" /> 
</bean> 
<!-- Queue configuration --> 
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
<property name="environment"> 
<props> 
<prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 
<prop key="java.naming.provider.url">jnp://localhost:1099</prop> 
<prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> 
<prop key="java.naming.security.principal">admin</prop> 
<prop key="java.naming.security.credentials">admin</prop> 
</props> 
</property> 
</bean> 
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
<property name="jndiTemplate" ref="jndiTemplate" /> 
<property name="jndiName" value="ConnectionFactory" /> 
</bean> 
<bean id="queueDestination" class="org.springframework.jndi.JndiObjectFactoryBean"> 
<property name="jndiTemplate" ref="jndiTemplate" /> 
<property name="jndiName"> 
<value>queue/ReceiverQueue</value> 
</property> 
</bean> 
</beans> 

Ne savais pas vraiment que la courbe d'apprentissage de ce est si long, je veux dire l'idée est très simple:

  1. Envoyer un message à la file d'attente de destination
  2. Recevoir de message de la file d'attente de destination

À recevoir des messages, vous effectuez les opérations suivantes(ne sorte de livre de le dire):

1 Locate a ConnectionFactory, typically using JNDI.
2 Use the ConnectionFactory to create a Connection.
3 Use the Connection to create a Session.
4 Locate a Destination, typically using JNDI.
5 Use the Session to create a MessageConsumer for that Destination.

Une fois que vous avez fait cela, des méthodes sur l'
MessageConsumer vous permettre de soit
requête de la Destination pour les messages ou
pour vous inscrire pour la notification des messages.

Quelqu'un peut-il svp me diriger vers la bonne direction, est-il un tutoriel qui vous explique en détails comment faire pour recevoir le message de la file d'attente?J'ai le travail envoyer un message code, n'est-ce pas le poster ici parce que ce post est trop long comme il est.
EDIT:

J'ai ajouté à mon jboss messaging destination-service.xml ce Mbean :

<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=ReceiverQueue"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
J'ai pensé que vous êtes en train de faire PTP de messagerie, mais c'est la messagerie asynchrone, vous êtes en train de faire.
Eh bien, je voulais mettre en œuvre point à point, mais évidemment, je ne suis pas d'y arriver
Maintenant, vous semblez avoir un bean a appelé récepteur et un haricot appelé messageListener, les deux auditeurs 🙂
Et la file d'attente nom de l'Expéditeur, testQueue, ne semble pas être celui que vous êtes à l'écoute sur.
OK, j'ai mis à jour mon code appcontext.xml et de l'expéditeur .. mais encore, je reçois cette erreur : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sender' defined in ServletContext resource [/WEB-INF/conf/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException Comment Exemple auditeur connaît de file d'attente pour les écouter, de toute façon, je n'ai pas préciser, ne sais pas comment.

OriginalL'auteur Gandalf StormCrow | 2010-03-22