2010-06-01 133 views
8

我有一個發送消息到服務器和服務器通過qpid消息接收它的工作示例。下面是簡單的Hello World發送給服務器:Java JMS消息傳遞

http://pastebin.com/M7mSECJn

這裏是接收請求和發送響應的服務器(當前客戶端沒有收到響應):

http://pastebin.com/2mEeuzrV

這裏是我的財產檔案:

http://pastebin.com/TLEFdpXG

他們都完美工作,我可以通過Qpid JMX管理控制檯在qpid隊列中看到消息。這些例子從https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/client/example下載(有人可能也需要它)。

我已經使用Spring之前完成了Jboss消息傳遞,但是我無法設置與qpid一樣的操作。隨着內部applicationsContext JBoss的我有豆jndiTemplate,conectionFactory,destinationQueue和jmscontainer這樣的:

<!-- 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> 

當然發送者和聽者的和:

<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" /> 

現在,我想利用改寫這個qpid例子春天上下文邏輯。誰能幫我?

回答

1

Spring提供了JmsTemplate類。檢查this網站指出,有一個例子如何設置模板(和ActiveMQ)

針對您的特殊例子嘗試更換jmsContainer這樣的:

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

您還可以更改代碼使用春天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); 
    } 
} 

還有對SpringSource的網站this

+0

所以,良好的文檔rry我無法正確配置spring appcontext可以請你發佈其他配置bean for your example它不一定是我的,所以我只能看到示例然後在我的實現 – London 2010-06-08 21:00:37