2010-06-01 4 views
8

J'ai un exemple d'envoi de message au serveur et au serveur qui le reçoit via la messagerie qpid. Voici monde simple bonjour à envoyer au serveur:Java JMS Messaging

http://pastebin.com/M7mSECJn

Et voici serveur qui reçoit des demandes et envoie une réponse (le client actuel ne reçoit pas de réponse):

http://pastebin.com/2mEeuzrV

ici est mon fichier de propriétés:

http://pastebin.com/TLEFdpXG

Ils fonctionnent tous parfaitement, je peux voir les messages dans la file d'attente qpid via la console de gestion Qpid JMX. Ces exemples sont téléchargés à partir de https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/example (quelqu'un peut en avoir besoin aussi).

J'ai fait de la messagerie Jboss en utilisant spring before, mais je n'arrive pas à faire la même chose avec qpid. Avec jboss l'intérieur applicationsContext j'avais haricots jndiTemplate, conectionFactory, destinationQueue et jmscontainer comme ceci:

<!-- 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/testQueue</value> 
    </property> 
</bean> 

    <bean id="jmsContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destination" ref="queueDestination" /> 
    <property name="messageListener" ref="listener" /> 
</bean> 

et de l'expéditeur du cours et de l'auditeur:

<bean id="sender" class="com.practice.Sender"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="queueDestination" ref="queueDestination" /> 
</bean> 


<bean id="listener" class="com.practice.MsgListener" /> 

J'aimerais maintenant de réécrire cet exemple QPID en utilisant logique de contexte de printemps. Quelqu'un peut-il m'aider?

Répondre

1

Spring offre la classe JmsTemplate. Vérifiez this site web que a un exemple de la façon de configurer le modèle (avec ActiveMQ)

Pour votre exemple précis essayez de remplacer le jmsContainer ceci:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
</bean> 

Vous devrez également modifier votre code pour utiliser printemps JmsTemplate:

public class MessageSender { 

    private Destination destination; 
    private JmsTemplate jmsTemplate; 

    public void setJmsTemplate(JmsTemplate jmsTemplate) { 
     this.jmsTemplate = jmsTemplate; 
    } 

    public void setDestination(Destination destination) { 
     this.destination = destination; 
    } 

    public void sendMessage() { 
     MessageCreator creator = new MessageCreator() { 
      public Message createMessage(Session session) { 
       TextMessage message = null; 
       try { 
        message = session.createTextMessage(); 
        message.setStringProperty("text", "Hello, World!"); 
       } 
       catch (JMSException e) { 
        e.printStackTrace(); 
       } 
       return message; 
      } 
     }; 
    jmsTemplate.send(destination, creator); 
    } 
} 

Il y a aussi une bonne documentation sur le site SpringSource pour this

+0

donc Rry Je ne pouvais pas configurer le contexte Appcontext correctement pouvez-vous s'il vous plaît poster d'autres configurations bean pour votre exemple, il ne doit pas être pour le mien, donc je peux juste voir l'échantillon puis mettre en œuvre dans le mien – London